使用JS请求网页的时候,发现得到的HTML中文部分都一些奇怪的东西

运行环境 Runtime environment

1
2
3
操作系统 : Windows10
IDE: JetBrains WebStorm 2020.2.4 x64
浏览器: Google Chrome 版本 67.0.3396.99(正式版本) (64 位)&& FireFox Developer Edition 版本63.0b4 (64位)

背景

使用JS请求网页的时候,发现得到的HTML中文部分都一些奇怪的东西。

里面的汉字的部分都是:

1
怀怀

之类的东西,又不想在后端层极处理这些编码问题占用后端处理时间。
于是,寻找在前端处理此类编码的解决办法

说明

在使用readability的api提取网页内容的时候点这里看-readability-网页内容提取利器,

中文内容都是&#x开头的一堆乱码似的东西。但保存成网页文件后,浏览器是可以正常显示的~

1
怀怀

一串字符是 HTML、XML 等 SGML 类语言的转义序列(escape sequence)。

它们不是「编码」。

以 HTML 为例,这三种转义序列都称作 character reference:第一种是 character entity reference,

后接预先定义的 entity 名称,而 entity 声明了自身指代的字符。

后两种是 numeric character reference(NCR),

数字取值为目标字符的 Unicode code point;以「&#」开头的后接十进制数字,

以「&#x」开头的后接十六进制数字。

&#x转汉字

1
unescape("怀怀".replace(/&#x/g,'%u').replace(/;/g,''))  

汉字转&#x

1
"怀怀".replace(/[^\u0000-\u00FF]/g,function(a){return escape(a).replace(/(%u)(\w{4})/gi,"&#x$2;")})  

总结

尽量在前端处理此类比较问题,解决后端算力
善用unescape和escape等JS方法