$_GET リクエストを文字列に変換する際に非常に奇妙な問題が発生します。 (PHP 5.2.17)
以下は、print_r() からの配列の問題領域の小さなスニペットです。
_GET (array)
...
[address_country_code] => GB
[address_name] => Super Mario
[notify_version] => 3.7
...
_GET データが使用される 2 つのケースがあります。
ケース 1):保存して後で使用:
// Script1.php
$data = json_encode($_GET);
# > Save to MySQL Database ($data)
// Script2.php (For Viewing & Testing URL later)
# > Load from Database ($result)
echo http_build_query(json_decoded($result,true));
上記の配列スニペットの結果: (正しい出力)
address_country_code=GB&address_name=スーパー+マリオ¬ify_version=3.7
ケース 2):ケース 1) で保存される直前に、ケース 1) と同じスクリプトで使用されます。
// Script1.php
echo http_build_query($_GET);
結果: (誤った出力)
address_country_code=GB&address_name=Super+Mario¬ify_version=3.7
ケース 2 で ¬ としていくつかの文字が出力される可能性はありますが、ケース 1 は問題ありません! それは私を狂わせています:(
また、http_build_query を使用する代わりに、foreach ループのキーと値で urlencode() を使用して URL を生成するカスタム関数を使用しようとしましたが、テスト ケースの 1 つで ¬ が %C2%AC に変更されました!