• 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;  
        }  
  • 相关阅读:
    POJ 3680_Intervals
    POJ 3680_Intervals
    POJ 3686_The Windy's
    POJ 3686_The Windy's
    Codeforces 629C Famil Door and Brackets
    Codeforces 629D Babaei and Birthday Cake(树状数组优化dp)
    Codeforces 629D Babaei and Birthday Cake(线段树优化dp)
    Codeforces 628F Bear and Fair Set
    18.04.26 魔兽世界终极版
    18.4.20 STL专项练习8选6
  • 原文地址:https://www.cnblogs.com/moogu/p/5105455.html
Copyright © 2020-2023  润新知