PHP中是否有任何内置函数可以解码
przysi%25C4%2599gam%2520s%25C5%2582u%25C5%25BCy%25C4%2587
进入
przysięgam służyć
?
我的猜测是你有 urldecode 和多字节字符的问题。Urldecode 只能解码 8 位字符,并且您的字符串包含多字节字符。
检查一些解决方案的urldecode 手册页注释。
urldecode — 解码 URL 编码的字符串
但我认为这不适用于多字节字符串。有关可能的用户态解决方法,请参阅手册页上的注释以及http://www.zend.com//code/codex.php?ozid=839&single=1
好的,戈登和马诺斯,你们都是对的(也都是错的;)
这只是普通的“urldecode”,但应用了两次
$a = "przysi%25C4%2599gam%2520s%25C5%2582u%25C5%25BCy%25C4%2587";
$b = urldecode(urldecode($a));
var_dump($b);
你有没有试过这个:
function utf8_urldecode($str) {
$str = preg_replace("/%u([0-9a-f]{3,4})/i","&#x\\1;",urldecode($str));
return html_entity_decode($str,null,'UTF-8');;
}
取自http://php.net/manual/en/function.urldecode.php
编辑:您的初始字符串搞砸了。你有没有对它进行两次urlencode?因为 utf8_urldecode(utf8_urldecode($encoded string)) 给出了正确的结果。