背景

最近公司有个格式整理的需求,需要将转义序列 \你\好 转换为中文。

&# 是什么?

HTMLXMLSGML 类语言的转义序列(escape sequence)。它们不是「编码」。

中国<!--中国-->
中国<!--中国-->

这种转义序列叫 numeric character reference(NCR)

可以理解为 &# 拼接 Unicode code point,以「&#」开头的后接十进制数字,以「&#x」开头的后接十六进制数字。

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

实现

1. 通过浏览器

function decodeHtml(html) {var txt = document.createElement("textarea");txt.innerHTML = html;return txt.value;
}

2. he 库

通过浏览器 HTMLDecode 在不同浏览器表现可能有差异。

可以使用这个符合 HTML 规范的库 he。
HTMLEncode/HTMLDecode

3. 根据转义规则简单实现替换中文

我们公司只需要替换中文部分,所以我使用下面函数就能实现。

function decodeHtml(str) {return str.replace(/&#([xX][0-9a-fA-F]+);/g, function (match, dec) {return String.fromCharCode('0' + dec);}).replace(/&#(\d+);/g, function (match, dec) {return String.fromCharCode(dec);});
}

资料

  • What’s the right way to decode a string that has special HTML entities in it

  • &#x开头的是什么编码呢?

JavaScript 实现 HTMLDecode相关推荐

  1. html在线encode,javascript另类方法实现htmlencode()与htmldecode()函数实例分析

    本文实例讲述了javascript另类方法实现htmlencode()与htmldecode()函数.分享给大家供大家参考,具体如下: 最常见的做法是采用正则表达式替换的方法,将特殊字符如 < ...

  2. 原生态纯JavaScript 100大技巧大收集

    来自:http://yonghu.blog.51cto.com/8166136/1346946 1.原生JavaScript实现字符串长度截取 1 2 3 4 5 6 7 8 9 10 11 12 1 ...

  3. 分享10个原生JavaScript技巧

    首先在这里要非常感谢无私分享作品的网友们,这些代码片段主要由网友们平时分享的作品代码里面和经常去逛网站然后查看源文件收集到的.把平时网站上常用的一些实用功能代码片段通通收集起来,方便网友们学习使用,利 ...

  4. 100个JavaScript代码片段

    实现字符串长度截取 function cutstr(str, len) {var temp;var icount = 0;var patrn = /[^\x00-\xff]/;var strre = ...

  5. 原生态纯JavaScript 100大技巧大收集---你值得拥有

    原生态纯JavaScript 100大技巧大收集---你值得拥有 1.原生JavaScript实现字符串长度截取 function cutstr(str, len) {var temp;var ico ...

  6. mysql插入ㄖ_原生JavaScript代码100个实例

    1.原生JavaScript实现字符串长度截取 function cutstr(str, len) { var temp; var icount = 0; var patrn = /[^\x00-\x ...

  7. 兼容IE和FF的JS HTMLEncode和HTMLDecode的完整实例[转]

    兼容IE和FF的JS HTMLEncode和HTMLDecode的完整实例,因为这个在在线编辑器和Ajax中经常用到,所以封装成函数可以直接调用,希望对大家有帮助. <html><h ...

  8. 加入收藏代码_100个原生JavaScript代码片段知识点详细汇总【实践】

    作者:小棋子js 转发链接:https://www.jianshu.com/p/b5171efa340f JavaScript 是目前最流行的编程语言之一,正如大多数人所说:"如果你想学一门 ...

  9. JavaScript自动生成博文目录导航

    http://www.cnblogs.com/xdp-gacl/p/3718879.html 为博客园添加目录的配置总结 http://www.cnblogs.com/jiangz/p/3734968 ...

最新文章

  1. mysql中的notin
  2. 20 Very Useful Java Code Snippets
  3. 廖雪峰团队最新研磨的实战宝典终终终终终终于免费了!
  4. 记一个mysql分页查询优化试验
  5. 实现strstr(****)
  6. linux命令 dstat,关于linux:每天学一个-Linux-命令103dstat
  7. java abstractrequest,Java AbstractJackson2HttpMessageConverter類代碼示例
  8. VC 打开目录对话框
  9. table 权限 展示页面
  10. linux加密框架 crypto 算法crypto_register_alg的注册流程
  11. html里面textfield属性,StyleableTextField的CSS属性htmlText
  12. java.util.Collections类使用(很多秘密,网上资料亲测)
  13. Python学习笔记--Python字符串连接方法总结
  14. 点云投影_激光点云变换到图像平面并保存成int16灰度图一帧激光点云+一张RGB图像得到彩色点云
  15. ValueError: This model has not yet been built. Build the model first by calling `build()` or calling
  16. pb 执行insert 后return是否会自动提交_一条MySQL更新语句是怎么执行的?
  17. 【第126期】游戏策划:给@毛毛团的简历分析
  18. 《麦肯锡方法》读书笔记21
  19. rtklib-RINEX文件读取-rinex.c解析(二)
  20. 快速非支配排序 python版

热门文章

  1. C#,打印漂亮杨辉三角形(帕斯卡三角形)的源代码
  2. XTM计算机辅助翻译,计算机辅助翻译原理与实践
  3. 如果你有多余的想象力,请安放在手机上
  4. 力扣 面试题 10.11. 峰与谷
  5. 2天线8状态空时网格码 c语言实现
  6. kendryte K210开发:关于MAIX BIT 无法使用 kendryte IDE 下载的问题
  7. Caused by: net.sf.jsqlparser.parser.ParseException: Encountered unexpected token: “:“ “:“
  8. 信息学奥赛一本通C++语言——1058:求一元二次方程
  9. layer.open属性详解 layui弹出层
  10. Brave Game ——巴什博奕