utf8_to_unicode in PHP

想使用8:UCS2格式编码下行短信的时候,需要把UTF8转换成Unicode的十六进制编码,但是PHP没有内置Unicode的支持,怎么办呢?

/**
 * 从UTF8转换成unicode beta1.0
 * @param mixed $string要转换的字符串,
 * @return unicode的十六进制编码
*/
function utf8_to_unicode_hex($string){
    
$length = strlen($string);
    
$outstring = "";
    
for ( $i = 0$i < $length$i++ )  {
        
$asc_value = ord($string[$i]);
        
if($asc_value > 127) {
            
if($asc_value >= 192 && $asc_value <= 223){
                
$str_dec = (ord($string[$i]) & 0x3f<< 6;
                
$i++;
                
$str_dec += ord($string[$i]) & 0x3f;
                
$str_hex = dechex($str_dec);
                
$outstring .= str_pad($str_hex,4,"0",STR_PAD_LEFT);
            }
elseif($asc_value >= 224 && $asc_value <= 239){
                
$str_dec = (ord($string[$i]) & 0x1f<< 12;
                
$i++;
                
$str_dec += (ord($string[$i]) & 0x3f<< 6;
                
$i++;
                
$str_dec += ord($string[$i]) & 0x3f;
                
$outstring .=dechex($str_dec);
            }
elseif($asc_value >= 240 && $asc_value <= 247){
                
$str_dec = (ord($string[$i]) & 0x0f<< 18;
                
$i++;
                
$str_dec += (ord($string[$i]) & 0x3f<< 12;
                
$i++;
                
$str_dec += (ord($string[$i]) & 0x3f<< 6;
                
$i++;
                
$str_dec += ord($string[$i]) & 0x3f;
                
$outstring .= dechex($str_dec);
            }
else{
                
$str_hex = dechex(ord($string[$i]));
                
$outstring .= str_pad($str_hex,4,"0",STR_PAD_LEFT);
            }
        }
else{
            
$str_hex = dechex(ord($string[$i]));
            
$outstring .= str_pad($str_hex,4,"0",STR_PAD_LEFT);
        }
    }
    
return $outstring;
}
posted on 2005-12-28 15:55  guoadou  阅读(960)  评论(0编辑  收藏  举报