zoukankan      html  css  js  c++  java
  • php UTF-8汉字与unicode互转

    最初在网上直接找的代码,在项目中用了之后发现存在汉字中存在数字和特殊字符的时候乱码,下面这段代码转为unicode是好用的,转utf-8好没测试。 

    /** 
         * utf-8 转unicode 
         * 
         * @param string $name 
         * @return string 
         */  
        function utf8_unicode($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).str_pad(base_convert(ord($c2), 10, 16), 2, 0, STR_PAD_LEFT);  
                    //$str .= base_convert(ord($c), 10, 16).str_pad(base_convert(ord($c2), 10, 16), 2, 0, STR_PAD_LEFT);  
                } else {  
                    $str .= 'u'.str_pad(base_convert(ord($c2), 10, 16), 4, 0, STR_PAD_LEFT);  
                    //$str .= str_pad(base_convert(ord($c2), 10, 16), 4, 0, STR_PAD_LEFT);  
                }  
            }  
            $str = strtoupper($str);//转换为大写  
            return $str;  
        }  
      
        /** 
         * unicode 转 utf-8 
         * 
         * @param string $name 
         * @return string 
         */  
        function unicode_decode($name)  
        {  
            $name = strtolower($name);  
            // 转换编码,将Unicode编码转换成可以浏览的utf-8编码  
            $pattern = '/([w]+)|(\u([w]{4}))/i';  
            preg_match_all($pattern, $name, $matches);  
            if (!empty($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;  
        }  
    

      

    /** 
         * utf-8 转unicode 
         * 
         * @param string $name 
         * @return string 
         */  
        function utf8_unicode($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).str_pad(base_convert(ord($c2), 10, 16), 2, 0, STR_PAD_LEFT);  
                    //$str .= base_convert(ord($c), 10, 16).str_pad(base_convert(ord($c2), 10, 16), 2, 0, STR_PAD_LEFT);  
                } else {  
                    $str .= 'u'.str_pad(base_convert(ord($c2), 10, 16), 4, 0, STR_PAD_LEFT);  
                    //$str .= str_pad(base_convert(ord($c2), 10, 16), 4, 0, STR_PAD_LEFT);  
                }  
            }  
            $str = strtoupper($str);//转换为大写  
            return $str;  
        }  
      
        /** 
         * unicode 转 utf-8 
         * 
         * @param string $name 
         * @return string 
         */  
        function unicode_decode($name)  
        {  
            $name = strtolower($name);  
            // 转换编码,将Unicode编码转换成可以浏览的utf-8编码  
            $pattern = '/([w]+)|(\u([w]{4}))/i';  
            preg_match_all($pattern, $name, $matches);  
            if (!empty($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;  
        }  
  • 相关阅读:
    Spring的PropertyPlaceholderConfigurer
    关于解决java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoader问题
    CentOS7.x安装flash
    C#——list列表复制
    C#——dataGridView控件获取当前鼠标所在的行
    C#——button按钮风格(按下改变)
    C#——chart控件坐标轴刻度细分(副刻度)
    C#——USBHID上位机开发(win10、win7)
    C#——自定义控件工具箱图标
    C#——给线程传递参数的三种方式
  • 原文地址:https://www.cnblogs.com/moogu/p/5105455.html
Copyright © 2011-2022 走看看