能解简体 繁体 日语 韩语 ISO-8859-1等编码的 unescape PHP函数!谢谢

解决方案 »

  1.   

    function code2utf($num){
      if($num<128) 
        return chr($num);
      if($num<1024) 
        return chr(($num>>6)+192).chr(($num&63)+128);
      if($num<32768) 
        return chr(($num>>12)+224).chr((($num>>6)&63)+128)
              .chr(($num&63)+128);
      if($num<2097152) 
        return chr(($num>>18)+240).chr((($num>>12)&63)+128)
              .chr((($num>>6)&63)+128).chr(($num&63)+128);
      return '';
    }function unescape($strIn, $iconv_to = 'UTF-8') {
      $strOut = '';
      $iPos = 0;
      $len = strlen ($strIn);
      while ($iPos < $len) {
        $charAt = substr ($strIn, $iPos, 1);
        if ($charAt == '%') {
          $iPos++;
          $charAt = substr ($strIn, $iPos, 1);
          if ($charAt == 'u') {
            // Unicode character
            $iPos++;
            $unicodeHexVal = substr ($strIn, $iPos, 4);
            $unicode = hexdec ($unicodeHexVal);
            $strOut .= code2utf($unicode);
            $iPos += 4;
          }
          else {
            // Escaped ascii character
            $hexVal = substr ($strIn, $iPos, 2);
            if (hexdec($hexVal) > 127) {
              // Convert to Unicode 
              $strOut .= code2utf(hexdec ($hexVal));
            }
            else {
              $strOut .= chr (hexdec ($hexVal));
            }
            $iPos += 2;
          }
        }
        else {
          $strOut .= $charAt;
          $iPos++;
        }
      }
      if ($iconv_to != "UTF-8") {
        $strOut = iconv("UTF-8", $iconv_to, $strOut);
      }   
      return $strOut;
    } //这个能简体.日语 ISO字符 但繁体解不了
    function Unescape($str)
    {
      //$str=str_replace("%B4","&#180;",$str);
      //$str=str_replace("%F6","&#246;",$str);
      $str = rawurldecode($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符号!