实体符

Home文章
 简介:某公司发布系统真坑,非得用gb2312码,某些特殊字显示不了

今天重构一段代码

if(sosoArticlKey){
sosoArticleKey.value = sosoArticlKey.replace("·","·");
sosoArticleKey.value = sosoArticlKey.replace("嬅","嬅");
sosoArticleKey.value = sosoArticlKey.replace("嬛","嬛");
sosoArticleKey.value = sosoArticlKey.replace("囧","囧");
sosoArticleKey.value = sosoArticlKey.replace("镕","镕");
sosoArticleKey.value = sosoArticlKey.replace("喆","喆");

sosoArticleValue = sosoArticleKey.value;
}

改成这样吧
if (sosoArticlKey) {
var replace = sosoArticlKey.replace("·", "·").replace("嬅", "\u5b05").replace("嬛", "\u5b1b")
.replace("囧", "\u56e7").replace("镕", "\u9555").replace("喆", "\u5586");
input.value = sosoArticleValue = replace;
}
但是在我的改变312码里不显示,深入了解下吧

引用知乎一段话,来源:https://www.zhihu.com/question/21390312


形如——
&#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」。所以——
中国
中国

作者:梁海
链接:https://www.zhihu.com/question/21390312/answer/18091465
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
 
原来任何汉子都可转化成Unicode码,也就都有实体符了
'嬛'.charCodeAt()
23323
'喆'.charCodeAt()

//反过来

String.fromCharCode('21894');
"喆"
 
ok对于大部分可以写个通用函数了
function htmlDecode(str) { 
 // 一般可以先转换为标准 unicode 格式(有需要就添加:当返回的数据呈现太多\\\u 之类的时)
 str = unescape(str.replace(/\\u/g, "%u"));
 // 再对实体符进行转义
 // 有 x 则表示是16进制,$1 就是匹配是否有 x,$2 就是匹配出的第二个括号捕获到的内容,将 $2 以对应进制表示转换
 str = str.replace(/&#(x)?(\w+);/g, function($, $1, $2) {
 return String.fromCharCode(parseInt($2, $1? 16: 10));
 });

 return str;
}
函数来源:http://www.cnblogs.com/zichi/p/5135636.html


标签:实体符

评论
Login