%B4
PHP能解开这个么?
ISO-8859-1的一个图标符号
function Unescape($str)
{
  $str = rawurldecode($str);
  $str=str_replace("%B4","¤",$str);
  preg_match_all("/%u.{4}|&#x.{4};|&#\d+;|.+/U",$str,$r);
  $ar = $r[0];
  foreach($ar as $k=>$v) 
 {
   if(substr($v,0,2) == "%u")
   $ar[$k] = iconv("UCS-2","utf-8",pack("H4",substr($v,-4)));
   elseif(substr($v,0,3) == "&#x")
   $ar[$k] = iconv("UCS-2","utf-8",pack("H4",substr($v,3,-1)));
   elseif(substr($v,0,2) == "&#") {
   $ar[$k] = iconv("UCS-2","utf-8",pack("n",substr($v,2,-1)));
 }
}
return join("",$ar);
}//UNescape
现在这个 日文 韩文 中文 繁体 都能解开,但ISO的不能.会变成一个?号

解决方案 »

  1.   

    参考http://blog.zol.com.cn/1595/article_1594514.html
      

  2.   


    PHP 的unescape函数由于PHP5不支持unicode,而JS的escape方法转义后的代码就是UNICODE的,所以PHP需要先解析unicode编码为utf8,然后再把utf8编码转成想要的编码 /**
    * 解析JS的escape编码

    * @param string $str
    * @param string $encoding
    */
    public static function unescape($str, $encoding = 'GBK')
    {
    $str = rawurldecode($str);
    $text = preg_replace_callback("/%u[0-9A-Za-z]{4}/", array(self, 'unicode2Utf8'), $str);
    return self::u8conv($text, $encoding);
    }

    /**
    * 转换UNICODE编码为UTF8

    * @param mixed $ar
    */
    public static function unicode2Utf8($ar)
    {
    $c = '';
    foreach($ar as $val){
    $val = intval(substr($val, 2), 16);
    if ($val < 0x7F) {        // 0000-007F 单字节
    $c .= chr($val);
    } elseif ($val < 0x800) { // 0080-0800 双字节
    $c .= chr(0xC0 | ($val / 64));
    $c .= chr(0x80 | ($val % 64));
    } else {                // 0800-FFFF 三字节
    $c .= chr(0xE0 | (($val / 64) / 64));
    $c .= chr(0x80 | (($val / 64) % 64));
    $c .= chr(0x80 | ($val % 64));
    }
    }
      return $c;
    }这个不错,可以试一下的
      

  3.   

    function unescape($str, $encoding = 'UTF-8')
        {
            $str = rawurldecode($str);
            $text = preg_replace_callback("/%u[0-9A-Za-z]{4}/", array(self, 'unicode2Utf8'), $str);
            return self::u8conv($text, $encoding);
        }
        function unicode2Utf8($ar)
        {
            $c = '';
            foreach($ar as $val){
                $val = intval(substr($val, 2), 16);
                if ($val < 0x7F) {        // 0000-007F 单字节
                    $c .= chr($val);
                } elseif ($val < 0x800) { // 0080-0800 双字节
                    $c .= chr(0xC0 | ($val / 64));
                    $c .= chr(0x80 | ($val % 64));
                } else {                // 0800-FFFF 三字节
                    $c .= chr(0xE0 | (($val / 64) / 64));
                    $c .= chr(0x80 | (($val / 64) % 64));
                    $c .= chr(0x80 | ($val % 64));
                }
            }
          return $c;
        }
    echo unescape("%B4");
    ...Notice: Use of undefined constant self - assumed 'self' in E:\Newsite\1.php on line 5Warning: preg_replace_callback() [function.preg-replace-callback]: Requires argument 2, 'self::unicode2Utf8', to be a valid callback in E:\Newsite\1.php on line 5Fatal error: Cannot access self:: when no class scope is active in E:\Newsite\1.php on line 6
    怎么使用???
      

  4.   

    这个函数不行的解不了%B4
    %B4 
    我在站长工具网站能解 其实是ISO-8859-1的一个字符希望能找到能解 ISO字符的 Unescape function
      

  5.   

    结贴 在PHP官网找到了.你们找的牛头不对马嘴...无语啊