惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

博客园 - 司徒正美
T
The Blog of Author Tim Ferriss
F
Fortinet All Blogs
Martin Fowler
Martin Fowler
罗磊的独立博客
The GitHub Blog
The GitHub Blog
L
LangChain Blog
A
About on SuperTechFans
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
D
DataBreaches.Net
宝玉的分享
宝玉的分享
U
Unit 42
阮一峰的网络日志
阮一峰的网络日志
Last Week in AI
Last Week in AI
N
Netflix TechBlog - Medium
The Cloudflare Blog
Microsoft Azure Blog
Microsoft Azure Blog
H
Help Net Security
美团技术团队
大猫的无限游戏
大猫的无限游戏
雷峰网
雷峰网
爱范儿
爱范儿
酷 壳 – CoolShell
酷 壳 – CoolShell
MongoDB | Blog
MongoDB | Blog

博客园 - guoadou

新的开始 《项目管理艺术》读书笔记 —— 决定做什么的常见不良决策一览 《项目管理艺术》读书笔记 —— 项目规划的三种观点 《IF》 - Joseph Rudyard Kipling 论信息系统的架构设计 【转】系统架构设计师考试大纲(2009) nginx error_page 404 用 php header 无法跳转 The Elements of Programming Style 导出MySQL数据库结构的PHP脚本 轻松面试 搞定技术奇才 Cyworld Values & Principles 通过创建SCHEMABINDING VIEW提高JOIN的速度 长的很像Cyworld的QQ [北京][赛我网]HTML高级工程师 - guoadou - 博客园 [招聘] 韩国企业招聘Java .NET 开发人员 utf8_to_unicode in PHP document.body.scrollTop总是零的原因 [新闻]Cyworld.com.cn开始公测 hex2bin in PHP
unicode_to_utf8 in PHP
guoadou · 2005-09-26 · via 博客园 - guoadou

当短信格式为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