PHP unicode和字符串的相互转换
悠扬的幻想天空 - 博客
April 24, 2019 技术 • 作者:悠扬
网上一堆错的unicode编码例子,没有一个对的,全是抄来抄去,坑啊,修修补补终于改好了
这是可用的unicode编码例子:
/**
* $str 原始中文字符串
* $encoding 原始字符串的编码,默认utf-8
* $prefix 编码后的前缀,默认"\u"
* $postfix 编码后的后缀,默认""
*/
function unicodeEncode($str, $encoding = 'utf-8', $prefix = '\u', $postfix = '') {
//将字符串拆分
$str = iconv("UTF-8", "gb2312", $str);
$cind = 0;
$arr_cont = array();
$unicodestr = '';
for ($i = 0; $i < strlen($str); $i++) {
if (strlen(substr($str, $cind, 1)) > 0) {
if (ord(substr($str, $cind, 1)) < 0xA1) { //如果为英文则取1个字节
array_push($arr_cont, substr($str, $cind, 1));
$cind++;
} else {
array_push($arr_cont, substr($str, $cind, 2));
$cind+=2;
}
}
}
foreach ($arr_cont as &$row) {
$row = iconv("gb2312", "UTF-8", $row);
}
//转换Unicode码
foreach ($arr_cont as $key => $value) {
$unicodestr.= $prefix .str_pad( base_convert(bin2hex(iconv('utf-8', 'UCS-4', $value)), 16, 16) , 4, 0, STR_PAD_LEFT) .$postfix;
}
return $unicodestr;
}
unicode的解码就很简单粗暴了。
function unicodeDecode($unicode_str){
$json = '{"str":"'.$unicode_str.'"}';
$arr = json_decode($json,true);
if(empty($arr)) return '';
return $arr['str'];
}