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中,我得到了字符串的 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)如何解释它,因为$_GET变量都是通过该函数传递的(参见http://php.net /manual/en/reserved.variables.get.php )

编辑

要将字符编码为 UTF-8 以在客户端的 URL 中使用,您可以encodeURI在 JavaScript 中使用。

对于你给出的例子,你可以做encodeURI('الapple');,应该返回"%D8%A7%D9%84apple"

将其提供给 PHP 的urldecode函数(因为它会自动)返回原始字符串,并带有以下十六进制输出;

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 回答