2
<?
$xm="1?x=1";
if($_GET["x"]=="1" || $_GET["x"]=='$xm'){ ?>
String Works
<? } ?>

基本的に、URL は次のようになります。

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 に答える