php unicode编码和字符串互转的方法
php字符串转Unicode编码,Unicode编码转php字符
百度了很多,都一样,要么不对,要不就是只是把字符串的汉字转Unicode
经过多次试验查找,找到了如下方法,
注意:字符串编码必须是utf-8,如果不是自行用icon转一下
//字符串转Unicode编码
functionunicode_encode($strLong){
$strArr=preg_split('/(?<!^)(?!$)/u',$strLong);//拆分字符串为数组(含中文字符)
$resUnicode='';
foreach($strArras$str)
{
$bin_str='';
$arr=is_array($str)?$str:str_split($str);//获取字符内部数组表示,此时$arr应类似array(228,189,160)
foreach($arras$value)
{
$bin_str.=decbin(ord($value));//转成数字再转成二进制字符串,$bin_str应类似111001001011110110100000,如果是汉字"你"
}
$bin_str=preg_replace('/^.{4}(.{4}).{2}(.{6}).{2}(.{6})$/','$1$2$3',$bin_str);//正则截取,$bin_str应类似0100111101100000,如果是汉字"你"
$unicode=dechex(bindec($bin_str));//返回unicode十六进制
$_sup='';
for($i=0;$i<4-strlen($unicode);$i++)
{
$_sup.='0';//补位高字节0
}
$str='\\u'.$_sup.$unicode;//加上\u返回
$resUnicode.=$str;
}
return$resUnicode;
}
//Unicode编码转字符串方法1
functionunicode_decode($name)
{
//转换编码,将Unicode编码转换成可以浏览的utf-8编码
$pattern='/([\w]+)|(\\\u([\w]{4}))/i';
preg_match_all($pattern,$name,$matches);
if(!empty($matches))
{
$name='';
for($j=0;$j<count($matches[0]);$j++)
{
$str=$matches[0][$j];
if(strpos($str,'\\u')===0)
{
$code=base_convert(substr($str,2,2),16,10);
$code2=base_convert(substr($str,4),16,10);
$c=chr($code).chr($code2);
$c=iconv('UCS-2','UTF-8',$c);
$name.=$c;
}
else
{
$name.=$str;
}
}
}
return$name;
}
//Unicode编码转字符串
functionunicode_decode2($str){
$json='{"str":"'.$str.'"}';
$arr=json_decode($json,true);
if(empty($arr))return'';
return$arr['str'];
}
echounicode_encode('若水小站:qq963087326'),'<br>';
//结果\u82e5\u6c34\u5c0f\u7ad9\u003a\u0071\u0071\u0039\u0036\u0033\u0030\u0038\u0037\u0033\u0032\u0036
echounicode_decode('\u82e5\u6c34\u5c0f\u7ad9\u003a\u0071\u0071\u0039\u0036\u0033\u0030\u0038\u0037\u0033\u0032\u0036');
//结果若水小站:qq963087326
总结
到此这篇关于phpunicode编码和字符串互转的方法的文章就介绍到这了,更多相关phpunicode编码和字符串互转内容请搜索毛票票以前的文章或继续浏览下面的相关文章希望大家以后多多支持毛票票!