0

いくつかのテストを行いましたが、これをテストすると次のようになります。

http://127.0.0.1/test.php?x={some non-english string}

http://127.0.0.1/test.php?x=الapple

次の出力を調べることによって:

echo bin2hex($_GET["x"]);
  • Firefox&ではChrome、string の UTF-8 表現を取得しますd8a7d9846170706c65

  • $_GET['x']変数。ではIE、 を取得し3f3f6170706c65ます。どちらが間違っていますか

そして、PHP はエンコーディングを変更せず、文字列をバイト配列としてしか認識しないことを知っています。

質問は:

これは、使用するブラウザによって制御されますか?

入力を常にUTF-8エンコーディングであると想定するのは信頼できますか?

ブラウザがサーバーに送信するエンコーディングを管理する方法はありますか? すべてのブラウザで?

4

3 に答える 3

1
于 2013-06-12T18:08:02.550 に答える
0

変数はすべてその関数を介して渡されるため、 urldecodehttp://www.php.net/manual/en/function.urldecode.php )がそれをどのように解釈するかに帰着するはずです( http://php.netを参照) /manual/en/reserved.variables.get.php )$_GET

編集

クライアント側から URL で使用するために文字を UTF-8 にエンコードするにはencodeURI、JavaScript で を使用できます。

あなたが与えた例については、あなたがすることができますencodeURI('الapple');、それは返すはずです"%D8%A7%D9%84apple"

これを PHP のurldecode関数に渡すと (自動的に)、元の文字列が返され、次の 16 進出力が返されます。

echo bin2hex(urldecode("%D8%A7%D9%84apple")); //outputs d8a7d9846170706c65
于 2013-06-12T15:38:46.223 に答える
-1

はい、可能です!

URL をエンコードするには:

<?php
   $url = "http://127.0.0.1/test.php?x=".urlencode("some non-english string");
?>

URL をデコードするには:

<?php
   $url = urldecode($_GET["x"]);
?>
于 2013-06-12T15:41:58.867 に答える