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 .= chr192 + ( ( $unicode - ( $unicode % 64 ) ) / 64 ) );
        
$utf8 .= chr128 + ( $unicode % 64 ) );

    } 
else {

        
$utf8 .= chr224 + ( ( $unicode - ( $unicode % 4096 ) ) / 4096 ) );
        
$utf8 .= chr128 + ( ( ( $unicode % 4096 ) - ( $unicode % 64 ) ) /
        
64 ) );
        
$utf8 .= chr128 + ( $unicode % 64 ) );

    } 
// if
    return $utf8;
// unicode_to_utf8
posted on 2005-09-26 15:12  guoadou  阅读(1489)  评论(0编辑  收藏  举报