首页 > 解决方案 > 按照隐蔽的链接与前面的数字链

问题描述

我正在构建一个小的伪装链接脚本,但我需要找到每个具有不同字符串编号的脚本,例如('mylinkname1'-1597)。顺便说一句:数字总是整数。

问题是我从不知道字符串编号,所以我想使用正则表达式,但有些东西失败了。

这是我现在得到的:

$pattern = '/-([0-9]+)/'; 

$v = $_GET['v']

if ($v == 'mylinkname1'.'-'.$pattern) {$link = 'http://example1.com/';}
if ($v == 'mylinkname2'.'-'.$pattern) {$link = 'http://example2.com/';}
if ($v == 'mylinkname3'.'-'.$pattern) {$link = 'http://example3.com/';}

header("Location: $link") ;
exit();

标签: phpregexcloaking

解决方案


破折号已经在模式中,因此您不必在 if 子句中添加它。

您可以省略数字周围的捕获组-[0-9]+,并且必须将模式与preg_match一起使用。

您可以将 if 语句的格式更新为:

$pattern = '-[0-9]+';

if (preg_match("/mylinkname1$pattern/", $v)) {$link = 'http://example1.com/';}

为了防止mylinkname1-1597成为更大单词的一部分,您可以用锚点包围模式^$断言字符串或单词边界的开始和结束\b


推荐阅读