%u66AE%u5149%u4E4B%u57CE2%uFF1A%u65B0%u6708cd2
关于取%u57CE2这个的有没有什么好的方法 我用的 函数 function unescape($str) { 
   $str = rawurldecode($str); 
   preg_match_all("/(?:%u.{4})|.+/",$str,$r); 
   $ar = $r[0]; 
   foreach($ar as $k=>$v) { 
     if(substr($v,0,2) == "%u" && strlen($v) == 6) 
     $ar[$k] = iconv("UCS-2","GB2312",pack("H4",substr($v,-4))); 
   } 
   return join("",$ar); 
} 用法 
$str = "%u66AE%u5149%u4E4B%u57CE2%uFF1A%u65B0%u6708cd2";
echo unescape($str);打印出来是这样的
暮光之城2%uFF1A%u65B0%u6708cd2
2后面的都转化不过来 有没有那位高手可以帮帮我这个小白!!!

解决方案 »

  1.   

    你的正则表达式有问题
      preg_match_all("/(?:%u.{4})|.+/",$str,$r);  
      $ar = $r[0]; 
    print_r($ar); Array
    (
        [0] => %u66AE
        [1] => %u5149
        [2] => %u4E4B
        [3] => %u57CE
        [4] => 2%uFF1A%u65B0%u6708cd2 由于“2”不满足(?:%u.{4}),导致后面的内容都被 .+ 匹配了
    )正确的写法应为
     preg_match_all("/(?:%u.{4})|./",$str,$r);