1

管子周围有一百万个备忘单,它们以不同的理解水平列举了由各种版本和 HTML 规范指定的字符实体。我不想相信其中任何一个,所以我想我会把它扔在这里,看看是否有人发布更权威的答案。

因此,假设我想使用正则表达式匹配任何和所有字符引用和实体。我会从/&(?:#(?:x[0-9a-f]+|[0-9]+)|[a-z]{???,???});/i. 但是什么会进入???s?我可以想到有两个字符长的实体,比如ltgt,但是在 HTML 的任何规范中是否有任何单字母实体?同样,最长的实体是什么?最后,除了直接键入它们之外,这是在 HTML 中表达文字字符的仅有的三种语法,不是吗?

4

3 回答 3

5

HTML5 中最长的是&CounterClockwiseContourIntegral;,并且没有单字母名称。

但请注意,命名实体引用并不像您想象的那样工作。一些命名字符引用不以分号结尾,因此正则表达式不会削减芥末。

于 2012-09-24T13:44:16.533 回答
3

HTML5 规范现在明确描述了自 90 年代中期以来浏览器用来纠正错误的方法:如果它与已知的字符引用不匹配,则逐字显示。因此,如果您希望您的正则表达式像浏览器一样工作,您必须复制浏览器的行为。

这意味着,您必须针对已知参考文献的完整列表进行测试,例如 Jukka 提到的参考文献。您可以巧妙地使用括号来缩写该术语,

[aeiou]uml

但是您需要将相同的知识烘焙到浏览器具有的正则表达式中,以获得相同的结果。

编辑:顺便说一下,命名实体中也可能有数字,例如,&ensp13;.

于 2012-09-24T13:43:49.040 回答
2

实体名称过去有 2 到 7 个字母,遵循 SGML 传统,在 ​​HTML 4.01 规范(和 XHTML 规范)中仍然如此。但是 HTML5 草稿添加了大量实体,称为命名字符引用,其中一些相当长,例如EmptyVerySmallSquare. 所以最好避免任何固定的上限——或大于 1 的下限。

于 2012-09-24T13:38:12.193 回答