新浪对文字作了编码处理:
%u6df1%u5733%u7535%u89c6%u53f0%u300a%u6b63%u534830%u5206%u300b
其实是中文的
深圳电视台《正午30分》
发js的unescape刚好可以解决这个问题。一阵狂喜。
淡定之后,发现。不能使用。
因为我的程序中,要用PHP来处理入库问题,不用能js来帮忙吧
在网上搜索如下函数:
 
复制代码 代码示例:
<?php
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","utf-8",pack("H4",substr($v,-4)));   
  }   
  return join("",$ar);   
}  
 
有点小问题,又换一个函数,好像功能要强大一些。
 
复制代码 代码示例:
<?php
function unescape($str) {   
  $str = rawurldecode($str);   
  preg_match_all("/%u.{4}|&#x.{4};|&#d+;|&#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",preg_replace("/[^d]/","",$v)));   
  }   
}   
return join("",$ar);   
}  
 
用了一段时间,发现在本地可以使用,但是我们的线上环境不能够使用。
线上是*nux,本地是XP了,还有,就是PHP版本不一样了。
后来,又在手册里面发现有一个类似的函数
而且还支持utf8,个人觉得应该通用性更好吧。
 
复制代码 代码示例:
<?php
//php字符转码
function utf8RawUrlDecode ($source) {   
   $decodedStr = "";   
   $pos = 0;   
   $len = strlen ($source);   
   while ($pos < $len) {   
       $charAt = substr ($source, $pos, 1);   
       if ($charAt == '%') {   
           $pos++;   
           $charAt = substr ($source, $pos, 1);   
           if ($charAt == 'u') {   
               // we got a unicode character   
               $pos++;   
               $unicodeHexVal = substr ($source, $pos, 4);   
               $unicode = hexdec ($unicodeHexVal);   
               $entity = "&#". $unicode . ';';   
               $decodedStr .= utf8_encode ($entity);   
               $pos += 4;   
           }   
           else {   
               // we have an escaped ascii character   
               $hexVal = substr ($source, $pos, 2);   
               $decodedStr .= chr (hexdec ($hexVal));   
               $pos += 2;   
           }   
       } else {   
           $decodedStr .= $charAt;   
           $pos++;   
       }   
   }   
   return $decodedStr;   
}
 
使用此函数成功解决问题。