baidut
10/29/2014 - 4:16 PM

Frequent Problems in php

Frequent Problems in php

<?php
// 测试可用
// 参考资料:PHP解码unicode编码的中文字符代码分享 http://www.jb51.net/article/53666.htm
//中文被unicode编码后了的数据"......\u65b0\u6d6a\u5fae\u535a......"
function replace_unicode_escape_sequence($match) {
  return mb_convert_encoding(pack('H*', $match[1]), 'UTF-8', 'UCS-2BE');
}
$name = '\u65b0\u6d6a\u5fae\u535a';
$str = preg_replace_callback('/\\\\u([0-9a-f]{4})/i', 'replace_unicode_escape_sequence', $name);
echo $str; //输出: 新浪微博 

//咱将上述方案A给封装起来~~~(方案A稳定版+升级+推荐)
class Helper_Tool
{
  static function unicodeDecode($data)
  {  
    function replace_unicode_escape_sequence($match) {
      return mb_convert_encoding(pack('H*', $match[1]), 'UTF-8', 'UCS-2BE');
    }  
  
    $rs = preg_replace_callback('/\\\\u([0-9a-f]{4})/i', 'replace_unicode_escape_sequence', $data);
  
    return $rs;
  }  
}
//调用
$name = '\u65b0\u6d6a\u5fae\u535a';
$data = Helper_Tool::unicodeDecode($name); //输出新浪微博


// 方案二 不推荐
// 传递给函数unicodeDecode的参数$name的内容中一定不能包含单引号,否则就会导致解析失败, 所以有必要的话可以借助 str_replace()函数将非法字符格式化为合格字符
function unicodeDecode($name){
  $json = '{"str":"'.$name.'"}';
  $arr = json_decode($json,true);
  if(empty($arr)) return ''; 
  return $arr['str'];
}
$name = '\u65b0\u6d6a\u5fae\u535a';
echo unicodeDecode($name); //输出: 新浪微博 

?>
<?php
// header("Content-type: text/html; charset=ISO-8859-1"); 	// 网页php乱码
// 查看当前编码是ISO-8859-1 但是还是有问题, 不解 print_r(iconv_get_encoding());
//$charset = 获取当前编码信息
$charset = 'utf-8';//'gbk';//'gb2312';//'big5';//'ISO-8859-1';//
?>