0

PHP中是否有任何内置函数可以解码

przysi%25C4%2599gam%2520s%25C5%2582u%25C5%25BCy%25C4%2587

进入

przysięgam służyć

?

4

4 回答 4

2

我的猜测是你有 urldecode 和多字节字符的问题。Urldecode 只能解码 8 位字符,并且您的字符串包含多字节字符。

检查一些解决方案的urldecode 手册页注释

于 2010-04-01T11:03:33.047 回答
2

urldecode — 解码 URL 编码的字符串

但我认为这不适用于多字节字符串。有关可能的用户态解决方法,请参阅手册页上的注释以及http://www.zend.com//code/codex.php?ozid=839&single=1

于 2010-04-01T10:57:00.583 回答
2

好的,戈登和马诺斯,你们都是对的(也都是错的;)

这只是普通的“urldecode”,但应用了两次

$a = "przysi%25C4%2599gam%2520s%25C5%2582u%25C5%25BCy%25C4%2587";
$b = urldecode(urldecode($a));
var_dump($b);
于 2010-04-01T11:33:34.343 回答
0

你有没有试过这个:

    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)) 给出了正确的结果。

于 2010-04-01T11:03:13.980 回答