10

この URL をリクエストするとします。

http://mydomain.com/script.php?var=2+2

$_GET['var'] は次のようになります: "2 2" ここは "2+2" であるべきです

明らかに、送信する前にデータをエンコードしてからデコードすることはできますが、これが唯一の解決策かどうか疑問に思っています。スペースをプラス記号に置き換えることもできますが、スペースも許可したいと思います。URLのデコードやエンコードを行わずに、渡された文字が欲しいだけです。ありがとうございました!

4

7 に答える 7

8
if(strpos($_SERVER["QUERY_STRING"], "+") !== false){
    $_SERVER["QUERY_STRING"] = str_replace("+", "%2B", $_SERVER["QUERY_STRING"]);
    parse_str($_SERVER["QUERY_STRING"], $_GET);
}
于 2012-12-28T13:19:09.530 に答える
6

もちろん。を読み込ん$_SERVER["QUERY_STRING"]で自分で分割し、通常の URL デコードを省略したり、%xxプレースホルダーのみを元に戻すことができます。

preg_match_all('/(\w+)=([^&]+)/', $_SERVER["QUERY_STRING"], $pairs);
$_GET = array_combine($pairs[1], $pairs[2]);

(例は英数字パラメータに対してのみ機能し、前述の %xx デコードは実行しません。生の入力を分割するだけです。)

于 2012-08-16T00:56:34.893 に答える
3

を使用することもできますがurlencode、スペースもプラスに変換されます。+通常、URL の はスペースを表すため、これは理にかなっています。プラス記号を意味するプラス記号が実際に必要な場合は、おそらく入力をエスケープする必要があります。これは、a+が になり%2B、URL が になることを意味しますhttp://mydomain.com/script.php?var=2%2B2

于 2012-08-16T01:00:58.017 に答える
1

今後の参考のために、エンコードされたシンボルを含む URL を送信しなくても、get リクエストに「+」シンボルを表示させることができます。

PHP Version 5.3.8

http://mydomain.com/script.php?var=2+2 を送信しています

エコー:

2+2

次のコードを使用します。

<?php
echo urlencode($_GET['var']);
?>
于 2013-10-17T08:04:59.247 に答える
1

そのために必要ないくつかの手順。

  • URL を要求する前に、URL 内のクエリ パラメータのプラス (+) 記号を「%2B」に置き換えるだけです。

  • 次に、クエリ パラメータを取得します。'%2B' は自動的にプラス記号に置き換えられます。

于 2015-11-28T20:22:30.903 に答える
1

クエリ セグメントにa を含む URL を生成している人は誰でも+、スペース文字を表すつもりでない限り、間違っています。+クエリの Aは予約文字です (re: RFC2396 §3.4 )。+クエリ文字列にリテラルを挿入する必要がある場合は、次のようにエンコードする必要があります%2B(re: RFC2396 §2.2 )。

于 2012-08-16T01:11:37.113 に答える