2012-09-24 29 views
0

管周围有一百万个cheatsheet,它们列举了不同层次的理解由各种版本和HTML规范指定的字符实体。我不想相信他们中的任何一个,所以我想我会在这里抛出它,看看是否有人发布了更权威的答案。什么是最长和最短的HTML字符实体名称?

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

干杯!

+3

为什么你需要指定长度呢?一个简单的'+'应该这样做,不是吗? – deceze

+1

不是真的......&laksjdlfkjasdlkfjadslkfjasdlkfjasldfkj;只会逐字呈现,因此不是一个实体。 – wwaawaw

+3

因此'&foo;'因为它不是一个定义的实体。这不是长度。 – deceze

回答

3

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

但请注意,命名实体引用不会按照您的想法工作。一些命名的字符引用不会以分号结尾,所以正则表达式不会切断芥末。

+1

有趣的是,我并不知道非分号终止的实体。你有一个例子/参考? – deceze

+1

你能提供一个非分号结尾的例子吗? – wwaawaw

+0

如果好奇,你可以添加示例和/或链接吗? (这和芥末有什么关系呢?:-) – tripleee

1

实体名称过去有2至7个字母,遵循SGML传统,这在HTML 4.01规范(和XHTML规范)中仍然是这种情况。但HTML5草案增加了大量实体,在那里名为named character references,其中一些实体相当长,如EmptyVerySmallSquare。因此,最好避免任何固定的上限 - 或者大于1的下限。

+0

为什么不是'2'的下界? – wwaawaw

+0

因为有一天某人可能会添加一个单字母实体(至少是特定于浏览器的)。 '&a;'是当前HTML规范的一个实体引用 - 只是一个未定义的实体引用。 –

3

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

这意味着,您必须测试已知引用的完整列表,如Jukka提到的引用。你可以巧妙地利用括号的缩写术语,

[aeiou]uml 

,但你需要烤相同知识到正则表达式,该浏览器有,为了得到相同的结果。

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

相关问题