1000字范文,内容丰富有趣,学习的好帮手!
1000字范文 > PHP unicode与普通字符串的相互转化

PHP unicode与普通字符串的相互转化

时间:2024-01-19 14:23:17

相关推荐

PHP   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';//补位高字节 0return '\\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>';

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。