2
<?
$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
4

5 回答 5

1

将其更改为:

<?
$xm="1?x=1";
if($_GET["x"]=="1" || $_GET["x"]=="{$xm}"){ ?>
String Works
<? } ?>
于 2012-09-04T16:04:57.427 回答
1

如果 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,则很难与任何恒定的事物进行比较。

于 2012-09-04T16:05:29.737 回答
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......如果这不是所需的行为,请告诉我。

于 2012-09-04T16:04:35.650 回答
-2

每当你想建立链接时使用http_build_query

于 2012-09-04T16:01:49.253 回答
-2

等号在 url 上下文中具有特殊含义。需要对它们进行编码以使用 urnencode() 或 rawurlencode() 或 base64 编码将它们视为文字值

于 2012-09-04T16:05:28.650 回答