unicode_to_utf8 in PHP
当短信格式为8:UCS2编码的时候,需要把Unicode的十六进制编码转换成UTF8,但是PHP没有内置Unicode的支持,怎么办呢?
/**
* 把Unicode的十六进制字符串转换成utf8的文本字符串
* @param mixed $str 要转换的字符串,不能为null
* @return utf8的文本字符串
*/
public static function unicode_hex_to_utf8($str) {
//判断长度
if((strlen($str)%4) != 0 )
throw new exception('(strlen($str) % 4 != 0');
//计算byte[]的长度
$len = strlen($str)/4;
$str_result = '';
//循环复制
for($i=0;$i<$len;$i++){
$str_unicode_hex = substr($str, $i*4, 4);
$str_result .= self::unicode_to_utf8($str_unicode_hex);
}
return $str_result;
}
private static function unicode_to_utf8( $unicode_hex ) {
$unicode = hexdec($unicode_hex);
$utf8 = '';
if ( $unicode < 128 ) {
$utf8 = chr( $unicode );
} elseif ( $unicode < 2048 ) {
$utf8 .= chr( 192 + ( ( $unicode - ( $unicode % 64 ) ) / 64 ) );
$utf8 .= chr( 128 + ( $unicode % 64 ) );
} else {
$utf8 .= chr( 224 + ( ( $unicode - ( $unicode % 4096 ) ) / 4096 ) );
$utf8 .= chr( 128 + ( ( ( $unicode % 4096 ) - ( $unicode % 64 ) ) /
64 ) );
$utf8 .= chr( 128 + ( $unicode % 64 ) );
} // if
return $utf8;
} // unicode_to_utf8
浙公网安备 33010602011771号