4

このコード:

$query = array(
    "var" => "no",
    "not_var" => "yes",
    "var2" => "maybe"
);
print http_build_query($query);

出力:

var=no¬_var=yes&var2=maybe

これは、PHP 5.3.19 を実行している自分のマシンで発生します。PHPfiddleでこの動作を再現しました。PHP 5.2.11 を実行しているideone.comで期待どおりに動作します。

なぜこれが起こるのですか?

4

2 に答える 2

8

これは、ブラウザが&notエンティティをエンコードしているためです。これを試してください。

print htmlentities(http_build_query($query));

通常の使用では、それは絶対に問題ありません。

ideonevsPHPFiddleで異なる理由はPHPFiddle、結果をiframeにダンプし、ideone他の表示が壊れないように、エンティティにエンコードされた状態で表示しているためです。

于 2013-01-22T11:44:14.170 に答える
2

結果に対して「ソースの表示」を行いましたか、それともブラウザーに依存して表示していますか?

実際、期待どおりに文字列を出力しています。誤って解釈しているのはブラウザです。

文字列には が含まれます&not。これは、末尾のセミコロンがないにもかかわらず、ブラウザによって HTML エンティティとして解釈されています。

ソースを表示すると、出力が実際に正しいことがわかります。

解決策: この文字列を HTML ページに含める場合は、HTML エンコードも行う必要があります。

于 2013-01-22T11:46:12.907 に答える