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;
}











































