小编给大家分享一下PHP中unicode与普通字符串相互转化的方法是什么,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!
方法一:json
/**
* unicode转字符串,通过json转化
* @param $str
* @return string
*/
function unicode_decode_by_json($str)
{
$json = '{"str":"' . $str . '"}';
$arr = json_decode($json, true);
if (empty($arr)) return '';
return $arr['str'];
}
方法二:
/**
* unicode转中文
* @param $data
* @return null|string|string[]
*/
function unicode_decode($data)
{
$rs = preg_replace_callback('/\\\\u([0-9a-f]{4})/i', 'replace_unicode_escape_sequence', $data);
return $rs;
}
function replace_unicode_escape_sequence($match)
{
return mb_convert_encoding(pack('H*', $match[1]), 'UTF-8', 'UCS-2BE');
}
字符串转unicode
/**
* @param string $str 需转换字符,这里为单个字符
* @return string
*/
function get_unicode($str)
{
$bin_str = '';
$arr = is_array($str) ? $str : str_split($str);//获取字符内部数组表示,此时$arr应类似array(228, 189, 160)
foreach ($arr as $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
return '\\u' . $_sup . $unicode; //加上 \u 返回
}
/**
* 转化字符串为unicode
* @param $str string 可单个/复数个
* @return string
*/
function unicode_encode($str)
{
$_arr_str = preg_split('/(?<!^)(?!$)/u', $str);//拆分字符串为数组(含中文字符)
$_ret_unicode = '';
foreach ($_arr_str as $_str) $_ret_unicode .= get_unicode($_str);
return $_ret_unicode;
}
测试效果:
$_str_test = 'see,你看我哪里像好人';
$_unicode = unicode_encode($_str_test);
echo $_str_test . ' <b style="color: red">=></b> ' . $_unicode, '<br><br>';
echo $_unicode . ' <b style="color: red">=></b> ' . unicode_decode($_unicode), '<br><br>';
echo $_unicode . ' <b style="color: red">=></b> ' . unicode_decode_by_json($_unicode), '<br><br>';
以上是PHP中unicode与普通字符串相互转化的方法是什么的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注亿速云行业资讯频道!
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。