unicode_to_utf8 in PHP

來源:互聯網
上載者:User
當簡訊格式為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

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.