<?
$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
答案 0 :(得分:1)
将其更改为:
<?
$xm="1?x=1";
if($_GET["x"]=="1" || $_GET["x"]=="{$xm}"){ ?>
String Works
<? } ?>
答案 1 :(得分:1)
如果网址看起来像...product?x=1?x=1
,则$_GET
数组将如下所示:
array(1) {
["x"] => string(5) "1?x=1"
}
所以你的情况需要看起来像:
if ($_GET["x"] == '1?x=1')
你的问题只是你用单引号引用变量$xm
,字面意思是字符串“$ xm”。
现在显然,这是一个相当破碎的网址。如果你不知道?x=1
会发生多少次,那就很难与任何常数进行比较。
答案 2 :(得分:0)
您应该使用的内容,'$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
...如果这不是理想的行为,请告诉我。
答案 3 :(得分:-2)
每当您想要构建链接时使用http_build_query
答案 4 :(得分:-2)
等号在url上下文中具有特殊含义。他们需要编码,以使用urnencode()或rawurlencode()或base64编码
将它们视为文字值