<?
$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 编码的文字值