Unicode与普通字符串如何相互转化

发布时间:2024-04-16 点击:93
unicode是国际组织制定的可以容纳世界上所有文字和符号的字符编码方案。目前的unicode字符分为17组编排,0x0000 至 0x10ffff,每组称为平面(plane),而每平面拥有65536个码位,共1114112个。然而目前只用了少数平面。utf-8、utf-16、utf-32都是将数字转换到程序数据的编码方案。
本文讲述unicode与普通字符串如何相互转化
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>';

域名可以自己注册吗?域名如何绑定IP
如何让老域名快速排名收录?
给网站申请域名的流程 购买网站域名是一次性费用吗
如何申请https证书认证 具体有哪些步骤
免费版企业邮箱是否有到期日
关于注册域名的常见问题和域名续费流程
垃圾邮件分析-2019中国企业邮箱安全性白皮书
中国钢研集团有限公司邮箱是什么