zoukankan      html  css  js  c++  java
  • php将unicode编码转为utf-8方法

    介绍

    在前端开发中,为了让中文在不同的环境下都能很好的显示,一般是将中文转化为unicode格式,即u4f60,比如:”你好啊”的 unicode编码为”u4f60u597du554a”。

    JS里将中文转为unicode编码很简单。

    function convert2Unicode(str) {
    	return str.replace(/[u0080-uffff]/g,
    	function($0) {
    		var tmp = $0.charCodeAt(0).toString(16);
    		return "u" + new Array(5 - tmp.length).join('0') + tmp;
    	});
    }

    并且也很简单,直接alert出来或者innerHTML到dom节点里都可以。

    但如果将u4f60u597du554a”字符传递给php,php就不能直接echo或者其他操作了。直接echo的话还是原生的字符,不 能自动转化为中文。

     

    php将unicode转为utf-8方法

    在php5.0及以上版本中提供了json_encode, json_decode方法。在使用json_encode变量的时候,如果变量里含有中文的话,会将中文转为unicode格式。所以在想是否可以通过 json_decode将unicode转为中文呢?实际测试发现是可以的,但对单一的字符串发现有些问题。

    对于简单的字符串,发现有时候使用json_decode转的化,结果直接为空了。但将字符串替换为数组然后在转就可以了。下面就有了下面封装的代 码。

    function unicode2utf8($str){
            if(!$str) return $str;
            $decode = json_decode($str);
            if($decode) return $decode;
            $str = '["' . $str . '"]';
            $decode = json_decode($str);
            if(count($decode) == 1){
                    return $decode[0];
            }
            return $str;
    }

    使用这个方法可以很好的将unicode编码转为utf-8编码。

    附上js转为实体字符和php将实体字符转为汉字的方法

    js将汉字转为实体字符:

    function convert2Entity(str) {
    	var len = str.length;
    	var re = [];
    	for (var i = 0; i < len; i++) { 		var code = str.charCodeAt(i); 		if (code > 256) {
    			re.push('&#' + code + ';');
    		} else {
    			re.push(str.charAt(i));
    		}
    	}
    	return re.join('');
    }

    php将实体字符转为utf-8汉字的方法:

    function entity2utf8onechar($unicode_c){
    	$unicode_c_val = intval($unicode_c);
    	$f=0x80; // 10000000
    	$str = "";
    	// U-00000000 - U-0000007F:   0xxxxxxx
    	if($unicode_c_val <= 0x7F){ 		$str = chr($unicode_c_val); 	} 	//U-00000080 - U-000007FF:  110xxxxx 10xxxxxx 	else if($unicode_c_val >= 0x80 && $unicode_c_val <= 0x7FF){ 		$h=0xC0; // 11000000 		$c1 = $unicode_c_val >> 6 | $h;
    		$c2 = ($unicode_c_val & 0x3F) | $f;
    		$str = chr($c1).chr($c2);
    	}
    	//U-00000800 - U-0000FFFF:  1110xxxx 10xxxxxx 10xxxxxx
    	else if($unicode_c_val >= 0x800 && $unicode_c_val <= 0xFFFF){ 		$h=0xE0; // 11100000 		$c1 = $unicode_c_val >> 12 | $h;
    		$c2 = (($unicode_c_val & 0xFC0) >> 6) | $f;
    		$c3 = ($unicode_c_val & 0x3F) | $f;
    		$str=chr($c1).chr($c2).chr($c3);
    	}
    	//U-00010000 - U-001FFFFF:  11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
    	else if($unicode_c_val >= 0x10000 && $unicode_c_val <= 0x1FFFFF){ 		$h=0xF0; // 11110000 		$c1 = $unicode_c_val >> 18 | $h;
    		$c2 = (($unicode_c_val & 0x3F000) >>12) | $f;
    		$c3 = (($unicode_c_val & 0xFC0) >>6) | $f;
    		$c4 = ($unicode_c_val & 0x3F) | $f;
    		$str = chr($c1).chr($c2).chr($c3).chr($c4);
    	}
    	//U-00200000 - U-03FFFFFF:  111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
    	else if($unicode_c_val >= 0x200000 && $unicode_c_val <= 0x3FFFFFF){ 		$h=0xF8; // 11111000 		$c1 = $unicode_c_val >> 24 | $h;
    		$c2 = (($unicode_c_val & 0xFC0000)>>18) | $f;
    		$c3 = (($unicode_c_val & 0x3F000) >>12) | $f;
    		$c4 = (($unicode_c_val & 0xFC0) >>6) | $f;
    		$c5 = ($unicode_c_val & 0x3F) | $f;
    		$str = chr($c1).chr($c2).chr($c3).chr($c4).chr($c5);
    	}
    	//U-04000000 - U-7FFFFFFF:  1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
    	else if($unicode_c_val >= 0x4000000 && $unicode_c_val <= 0x7FFFFFFF){ 		$h=0xFC; // 11111100 		$c1 = $unicode_c_val >> 30 | $h;
    		$c2 = (($unicode_c_val & 0x3F000000)>>24) | $f;
    		$c3 = (($unicode_c_val & 0xFC0000)>>18) | $f;
    		$c4 = (($unicode_c_val & 0x3F000) >>12) | $f;
    		$c5 = (($unicode_c_val & 0xFC0) >>6) | $f;
    		$c6 = ($unicode_c_val & 0x3F) | $f;
    		$str = chr($c1).chr($c2).chr($c3).chr($c4).chr($c5).chr($c6);
    	}
    	return $str;
    }
    function entities2utf8($unicode_c){
    	$unicode_c = preg_replace("/&#([da-f]{5});/es", "entity2utf8onechar('\1')", $unicode_c);
    	return $unicode_c;
    }

    entity2utf8onechar方法来自http://blog.sina.com.cn/s /blog_48d7f3f40100o6ak.html

    使用方式:

    $utf8chars = entities2utf8("啊你好啊");

     

    转自:http://www.welefen.com/php-unicode-to-utf8.html

  • 相关阅读:
    程序员的私人外包专家
    目录
    Autumoon Code Library 2008 Beta版 重新发布
    为您的开发团队找个好管家
    .NET编程利器:Reflector for .NET
    3. Extension Methods(扩展方法)
    1. C# 3.0简介
    4. Lambda Expressions (Lambda表达式)与Expressions Tree(表达式树)
    7. Query Expressions(查询表达式)
    6. Anonymous Types(匿名类型)
  • 原文地址:https://www.cnblogs.com/lechie/p/3795812.html
Copyright © 2011-2022 走看看