1

http_build_query (PHP) を使用して、配列から URL を作成したいと考えています。これは配列です:

$a = array("skip" => 1, "limit" => 1, "startkey" => '["naturalProduct","Apple"]')

通話後

$s = http_build_query($a);

次の文字列 $s を取得します。

skip=1&limit=1&startkey=%5B%22naturalProduct%22%2C%22Apple%22%5D

私の問題は、次のような URL が必要になることです。

skip=1&limit=1&startkey=["naturalProduct","Apple"]

つまり、次の記号を変換したくないということです: ",[]

http_build_query の後に呼び出す変換関数を作成しました。

str_replace(array("%5B", "%22", "%5D", "%2C"), array('[', '"', ']', ','), $uri);

今の私の質問: 期待される結果に到達するためのより良い方法はありますか?

4

2 に答える 2

6

今の私の質問: 期待される結果に到達するためのより良い方法はありますか?

はい、もっと良いものがあります。http_build_queryDocsはデフォルトで、RFC 1738 で概説されているように URL エンコードを使用します。文字列の URL エンコードを解除したいだけです。そのために、あなたのケースでこれを行う関数があります: urldecodeDocs :

$s = http_build_query($a);
echo urldecode($s);

それを行った後は、その URL が有効な URL ではなくなることを認識していただければ幸いです。あなたはすでにそれをデコードしました。

于 2012-06-10T10:19:33.583 に答える
1

特殊文字をデコードする必要はありません。特殊文字は、PHP の$_GETスーパーグローバルが生成されるときに自動的にデコードされます。生成された文字列を処理print_r($_GET)すると、次のようになります。

配列 ( [skip] => 1 [limit] => 1 [startkey] => [\"naturalProduct\",\"Apple\"] )

すべての文字をデコードしましたが、二重引用符をエスケープしていません。それらをエスケープ解除するには、次を使用しますstripslashes()

echo stripslashes($_GET['startkey']);

これは与える

["ナチュラルプロダクト","アップル"]

その後、必要に応じて解析または使用できます。ThiefMaster がコメントで言及しているように、より良い解決策は、magic_quotes_gpcあなたのphp.ini;で無効にすることです。非推奨であり、PHP6 で完全に削除される予定です。

于 2012-06-10T10:13:27.560 に答える