• 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;  
        }  
  • 相关阅读:
    美国贷款买饭的房屋保险
    ArrayList和数组间的相互转换
    JList动态添加元素
    美国交往礼仪
    刘元普双生贵子(但行好事,莫问前程)
    CountDownLatch与CyclicBarrier
    彻底理解Java的feature模式
    Java中的Future模式原理自定义实现
    浅谈Java Future接口
    Future接口和Callable接口以及FeatureTask详解
  • 原文地址:https://www.cnblogs.com/moogu/p/5105455.html
Copyright © 2020-2023  润新知