<?
$xm="1?x=1";
if($_GET["x"]=="1" || $_GET["x"]=='$xm'){ ?>
String Works
<? } ?>
基本上,网址是:
http://site.com/shop/category/product?x=1?x=1
提交表单时会发生这种情况。我无权将其更改为:
http://site.com/shop/category/product?x=1&x2=1
将其更改为:
<?
$xm="1?x=1";
if($_GET["x"]=="1" || $_GET["x"]=="{$xm}"){ ?>
String Works
<? } ?>
如果 URL 看起来像...product?x=1?x=1
,则$_GET
数组将如下所示:
array(1) {
["x"] => string(5) "1?x=1"
}
所以你的情况只需要看起来像:
if ($_GET["x"] == '1?x=1')
您的问题只是您$xm
用单引号引用变量,这实际上导致字符串“$xm”。
现在显然,这是一个相当损坏的 URL。如果您不知道其中会发生多少次?x=1
,则很难与任何恒定的事物进行比较。
您所拥有的应该可以工作,而更改'$xm'
不会评估为"1?x=1"
:
if (isset($_GET['x']) && ($_GET['x'] == 1 || $_GET['x'] == $xm)) {
echo 'string works';
}
如果参数总是数字,你也可以$_GET['x']
在比较之前把它写成一个整数:
if (isset($_GET['x']) && $_GET['x'] == 1) {
echo 'string works';
}
这是有效的'1?x=1' == 1
,但也'1?x=2' == 1
......如果这不是所需的行为,请告诉我。
每当你想建立链接时使用http_build_query
等号在 url 上下文中具有特殊含义。需要对它们进行编码以使用 urnencode() 或 rawurlencode() 或 base64 编码将它们视为文字值