现在的位置: 首页 > 综合 > 正文

PHP中对汉字进行UNICODE编码和解码的实现

2018年01月30日 ⁄ 综合 ⁄ 共 896字 ⁄ 字号 评论关闭

UNICODE编码在PHP中使用UCS-2编码,之前还真是没有发现,一直还以为是UTF-8就行了。贴出代码:

view plaincopy to clipboardprint?
//将内容进行UNICODE编码,编码后的内容格式:YOKA\u738b (原始:YOKA王)

function unicode_encode($name)  
{  
    $name = iconv('UTF-8', 'UCS-2', $name);  
    $len = strlen($name);  
    $str = '';  
    for ($i = 0; $i < $len - 1; $i = $i + 2)  
    {  
        $c = $name[$i];  
        $c2 = $name[$i + 1];  
        if (ord($c) > 0)  
        {    // 两个字节的文字  
            $str .= '\u'.base_convert(ord($c), 10, 16).base_convert(ord($c2), 10, 16);  
        }  
        else 
        {  
            $str .= $c2;  
        }  
    }  
    return $str;  
} 

// 将UNICODE编码后的内容进行解码,编码后的内容格式:YOKA\u738b (原始:YOKA王)  

function unicode_decode($name)  
{  
    // 转换编码,将Unicode编码转换成可以浏览的utf-8编码  
    $pattern = '/([\w]+)|(\\\u([\w]{4}))/i';  
    preg_match_all($pattern, $name, $matches);  
    if (!emptyempty($matches))  
    {  
        $name = '';  
        for ($j = 0; $j < count($matches[0]); $j++)  
        {  
            $str = $matches[0][$j];  
            if (strpos($str, '\\u') === 0)  
            {  
                $code = base_convert(substr($str, 2, 2), 16, 10);  
                $code2 = base_convert(substr($str, 4), 16, 10);  
                $c = chr($code).chr($code2);  
                $c = iconv('UCS-2', 'UTF-8', $c);  
                $name .= $c;  
            }  
            else 
            {  
                $name .= $str;  
            }  
        }  
    }  
    return $name;  
} 

抱歉!评论已关闭.