JS,JQuery使用心得

在JS里,有很多Unicode编码的中文(形如中国)。这些编码一般在浏览器里能被很好的解析成中文,但是有些情况下无法被解析,比如赋值到input框中。找了很多资料,这里总结一下我的解决办法。

形如——
&#dddd;
&#xhhhh;
&#name;
——的一串字符是 HTML、XML 等 SGML 类语言的转义序列(escape sequence)。它们不是「编码」。


以 HTML 为例,这三种转义序列都称作 character reference:
前两种是 numeric character reference(NCR),数字取值为目标字符的 Unicode code point;以「&#」开头的后接十进制数字,以「&#x」开头的后接十六进制数字。
后一种是 character entity reference,后接预先定义的 entity 名称,而 entity 声明了自身指代的字符。
从 HTML 4 开始,NCR 以 Unicode 为准,与文档编码无关。


「中国」二字分别是 Unicode 字符 U+4E2D 和 U+56FD,十六进制表示的 code point 数值「4E2D」和「56FD」就是十进制的「20013」和「22269」。所以——
中国
中国
——这两种 NCR 写法都会在显示时转换为「中国」二字。


NCR 可以用于转义任何 Unicode 字符,而 character entity reference 很受限,参见 HTML 4 和 HTML5 中已有定义的字符列表:


JS函数String.fromCharCode()可以解析这种编码成中文,但是只能解析数字部分,而且只能解析单个字符。如String.fromCharCode(20013)  = “中”。我写了一个效率较低的解析函数,用于去掉字符前的"&#"和字符后的";",以及排除非Unicode中文。给大家参考下,没时间优化,有更好的解决办法(如有函数一下能解析一句话等)

<span style="white-space:pre">	</span>produceUnicode = function(str){
    		var result = "";
    		var index = str.indexOf("&#");
    		if(index == -1) return str;
    		result += str.substring(0,index);
    		var temp = str.substring(index).split(";");
    		$(temp).each(function(i,v){
    			var tempIndex = v.indexOf("&#");
    			if(tempIndex>-1){//判断是不是Unicode中文,如果不是就不转换编码
    				result += v.substring(0,tempIndex);//将Unicode字符前的一段字符加入
	    			result += String.fromCharCode(v.substring(tempIndex).replace("&#",""));
    			}else{
    				result += v+(i<temp.length-1?";":"");  //当split出来的字符不是Unicode编码的时候,这个字符后面应该是有一个";"的
    			}
    		});
    		return result;
    	}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值