当短信格式为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 相关文章: 2022-02-21 2021-11-17 2021-05-20 2021-09-08 2021-12-15 2022-12-23 2022-12-23 2022-12-23