PHP +字符编码+ GET参数

时间:2012-03-24 16:46:41

标签: php character-encoding get

我已经实现了一个PHP脚本 我通过以下网址运行我的PHP脚本:http://server/script.php?param1=%80t%80

所以我将一个GET参数传递给我的PHP脚本 该参数名为param1 param1包含字符串“€t€”,其URL编码为“%80t%80”。

我的PHP脚本使用UTF-8规范进行编码 我想知道哪个字符编码适用于$ _GET [“param1”]中包含的字符串。

确保$ _GET [“param1”]上的字符编码不是UTF-8 原因:我的PHP脚本中的以下命令导致“80 74 80”,这是$ _GET [“param1”]的十六进制表示。

var_dump(unpack("H*", $_GET["param1"]));

如果$ _GET [“param1”]上的字符编码是UTF-8,那么之前的PHP命令将导致“e2 82 ac 74 e2 82 ac”。

$ _GET [“param1”]上的字符编码不是ISO-8859-1,因为€符号不包含在IS0-8859-1字符集中。
要查看ISO-8859-1编码表,请转至http://en.wikipedia.org/wiki/ISO/IEC_8859-1
所以mb_internal_encoding函数返回的PHP内部编码不适用于$ _GET [“param1”],因为它是IS0-8859-1。

有没有人知道哪个字符编码适用于$ _GET [“param1”]中包含的字符串?

2 个答案:

答案 0 :(得分:0)

我不确定我是否理解为什么在尝试处理您尝试解决的字符编码问题时使用解包。所以这就是......

我想你试图用以下内容读取$ _GET ['param1']的值:

$ var = $ _GET ['param1'];我建议你尝试urldecode $ var = urldecode($ _ GET ['param1'])然后使用函数来处理multiByte字符串http://gr.php.net/manual/en/ref.mbstring.php 或使用iconv功能。

希望以上有所帮助。

答案 1 :(得分:0)

  

确保$ _GET [“param1”]上的字符编码不是UTF-8。该   原因:我的PHP脚本中的以下命令导致“80 74 80”   这是$ _GET [“param1”]的十六进制表示。

这正是您所期望的,因为这是您所写的。参数%80t%80表示三个字符:十六进制80,“t”,十六进制80.%80表示“十六进制80”。您手动指定特定的十六进制值,字符编码完全没有。

试试这个:

var_dump( unpack ("H*", urldecode("%80t%80")));

而且:

http://server/script.php?param1=%e2%82%ac%74%e2%82%ac