如何将O'Brien转换为O'Brien?这类字符编码的名称是什么?
问题解答
编码官方名称
这类编码的官方名称为HTML实体编码(HTML Entity Encoding),也称为HTML字符引用,是HTML规范中定义的特殊字符转义规则,主要用于转义HTML保留字符、无法直接输入的特殊字符,避免字符和HTML语法产生冲突。
它分为两类:
- 命名实体:用易读的字符串标识字符,比如
&代表&、<代表< - 数字实体:用字符的Unicode码点标识,分十进制(格式为
&#十进制数字;)和十六进制(格式为&#x十六进制数字;)两种,你示例中的'就是十六进制数字实体,对应单引号'。
你获取到的O&#x27;Brien属于经过两次HTML实体编码的结果:第一次把单引号编码为',第二次又把'开头的&编码为&,最终得到该字符串。
转换方法
只需要对字符串做对应次数的HTML实体解码即可,不同开发环境的常用实现方式如下:
Python
使用标准库html的unescape方法即可:
import html raw_str = "O&#x27;Brien" # 两次解码对应两次编码的场景 result = html.unescape(html.unescape(raw_str)) # 输出结果为 O'Brien
JavaScript
可以用DOMParser实现原生解码:
function htmlDecode(str) { const doc = new DOMParser().parseFromString(str, "text/html"); return doc.documentElement.textContent; } const rawStr = "O&#x27;Brien"; const result = htmlDecode(htmlDecode(rawStr)); // 输出结果为 O'Brien
Java
可以使用Apache Commons Text库的StringEscapeUtils工具类:
import org.apache.commons.text.StringEscapeUtils; public class HtmlDecodeDemo { public static void main(String[] args) { String rawStr = "O&#x27;Brien"; String result = StringEscapeUtils.unescapeHtml4(StringEscapeUtils.unescapeHtml4(rawStr)); // 输出结果为 O'Brien } }
内容的提问来源于stack exchange,提问作者Daniel Rodríguez Meza
相关产品推荐
相关产品推荐

