此页面上的文档http://ru2.php.net/manual/en/function.urldecode.php表示“超级全球$ _GET和$ _REQUEST已经解码”。
但在我的服务器上这段代码
var_dump($_GET['str'])
返回
string(21) "ффф"
如何在$ _GET中使用php解码字符串?
答案 0 :(得分:2)
正如@deceze所述,该字符串已被解码。但是,如果您想将其转换为可读字符,请使用html_entity_decode()
。
$string = 'ффф';
echo html_entity_decode($string);
返回
ффф
答案 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'
根据之前引用的表格确实是正确的。