PHP - $ _GET - 解码utf-8

时间:2014-03-25 11:05:06

标签: php

此页面上的文档http://ru2.php.net/manual/en/function.urldecode.php表示“超级全球$ _GET和$ _REQUEST已经解码”。

但在我的服务器上这段代码

var_dump($_GET['str'])

返回

string(21) "ффф"

如何在$ _GET中使用php解码字符串?

4 个答案:

答案 0 :(得分:2)

正如@deceze所述,该字符串已被解码。但是,如果您想将其转换为可读字符,请使用html_entity_decode()

$string = 'ффф';
echo html_entity_decode($string);

返回

ффф

示例:http://3v4l.org/eqDf3

答案 1 :(得分:2)

您应该在表单上设置正确的标题内容类型:

header('Content-Type: text/html; charset="UTF-8"');

你应该在没有任何解码操作的情况下从$ _GET获得正确的数据。

答案 2 :(得分:1)

已解码。该值已从其 URL百分比编码形式解码。原文可能是:

%26%231092%3B%26%231092%3B%26%231092%3B

现已解码为:

ффф

字符串的内容是转义HTML。如果您要发送转义的HTML,则会获得转义HTML。如果您不喜欢转义HTML,请不要发送转义HTML。 PHP不会以递归方式对URL值尝试每种可能的编码格式,直到无法解码为止。

答案 3 :(得分:1)

&#之后的数字是十进制unicode代码点,与UTF-8无关。

根据http://www.utf8-chartable.de/unicode-utf8-table.pl?start=1024&number=1024&unicodeinhtml=dec,你的角色是:

U+0444  ф   d1 84   ф ф   CYRILLIC SMALL LETTER EF

这里,d1 84是它的UTF-8表示。

如前所述,html_entity_decode("ффф", null, 'UTF-8')应该可以解决问题。

返回以下字符串:

'ÐäÐäÐä'

可以找到这样的十六进制表示:

>> bin2hex($s)
'd184d184d184'

根据之前引用的表格确实是正确的。