我如何编写这个包含等号的 PHP 字符串


How do I write this PHP string that has an equal sign within it?

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