XHTML5和HTML4字符实体

Eva*_*oll 10 html5 html-entities

XHTML5是否支持 和等字符实体—.在工作中,我们可以要求特定的软件访问网站的管理员端,人们要求多文件上传.对我来说,这是一个很容易理由要求迁移到FF 3.6+,所以我很快就会这样做.我们目前使用XHTML 1.1,在转移到HTML5时,我遇到字符实体名称的问题......有没有人有这方面的文档?

我看到WHATWG规范上有一个列表,但我不确定它是否会影响文件application/xhtml+xml.无论如何,两个提到的Chromium nightly和FF 3.6中的触发错误.

bob*_*nce 12

XHTML5没有DTD,因此XML解析器将看不到任何实体定义(除了预定义的定义).如果您想使用实体,则必须在内部子集中为自己定义实体.

<!DOCTYPE html [
    <!ENTITY mdash "—">
]>
<html xmlns="http://www.w3.org/1999/xhtml">
    ... &mdash; ...
</html>
Run Code Online (Sandbox Code Playgroud)

(当然,如果您将浏览器提供给它们,则使用内部子集可能会使浏览器text/html跳起来.不允许在非XHTML HTML5文档中发送内部子集.)

HTML5 维基目前推荐:

不要使用XHTML实体引用(除5个预定义的实体:&amp;,&lt;,&gt;,&quot;&apos;)

我同意这个建议,不仅适用于XHTML5,还适用于XML和HTML.今天没有理由将HTML实体用于任何事情.直接键入的Unicode字符对于每个人来说都更具可读性,并且&#...;当您无法保证8位/编码 - 清除传输时,字符引用可用于那些令人遗憾的情况.(由于没有为大多数Unicode字符定义HTML实体,所以无论如何都需要它们.)

  • 如果您想要可读性,只需键入" - "字符即可.尝试学习所有HTML实体名称没有用处.使用真实的角色; 如果必须,可以从字符映射中粘贴它,但是如果你这么做的话,有更简单的方法可以输入这些字符.(例如,在我的键盘上,shift-alt-minus会产生它.) (5认同)
  • 对,不幸的是,它看起来没有什么不同. (5认同)
  • `&#12345;`比`&mdash;`更具可读性? (4认同)
  • 这就是今天大多数 XML 用户从不使用实体引用的原因。这是一个更具可读性的不间断空格:“ ”。(键盘上的 Shift 空格,FWIW!) (2认同)

mog*_*sie 6

我需要对HTML 5进行XML验证.HTML 4和XHTML只有一个平庸的250个左右的实体,而当前的草案(2012年1月)有超过2000个.

GET 'http://www.w3.org/TR/html5-author/named-character-references.html' |
xmllint --html --xmlout --format --noent - | 
egrep '<code|<span.*glyph' |  # get only the bits we're interested in
sed -e 's/.*">/__/' | # Add some "__" markers to make e.g. whitespace
sed -e 's/<.*/__/' |  #  entities work with xargs
sed 's/"/\&quot;/' | # xmllint output contains " which messes up xargs
sed "s/'/\&apos;/" | # ditto apostrophes. Make them HTML entities instead.
xargs -n 2 echo |  # Put the entity names and values on one line
sed 's/__/<!ENTITY /' | # Make a DTD
sed 's/;__/ /' |
sed 's/ __/"/'  |
sed 's/__$/">/' |
egrep -v '\bapos\b|\bquot\b|\blt\b|\bgt\b|\bamp\b' # remove XML entities.
Run Code Online (Sandbox Code Playgroud)

您最终得到一个包含2114个实体的文件.

<!ENTITY AElig "&#xC6;">
<!ENTITY Aacute "&#xC1;">
<!ENTITY Abreve "&#x102;">
<!ENTITY Acirc "&#xC2;">
<!ENTITY Acy "&#x410;">
<!ENTITY Afr "&#x1D504;">
Run Code Online (Sandbox Code Playgroud)

将其插入XML解析器应该允许XML解析器解析这些字符实体.

2012年10月更新:由于工作草案现在有一个JSON文件(是的,我还在使用正则表达式),我将其用于单个sed:

curl -s 'http://www.w3.org/TR/html5-author/entities.json' |
sed -n '/^  "&/s/"&\([^;"]*\)[^0-9]*\[\([0-9]*\)\].*/<!ENTITY \1 "\&#\2;">/p' |
uniq
Run Code Online (Sandbox Code Playgroud)

当然,javascript相当于更强大,但不是每个人都安装了节点.每个人都有sed,对吗?随机样本输出:

<!ENTITY subsetneqq "&#10955;">
<!ENTITY subsim "&#10951;">
<!ENTITY subsub "&#10965;">
<!ENTITY subsup "&#10963;">
<!ENTITY succapprox "&#10936;">
<!ENTITY succ "&#8827;">
Run Code Online (Sandbox Code Playgroud)


Eva*_*oll 2

正确答案(现代方式)

我五年前就问过这个问题。现在每个浏览器都支持 UTF-8。而且,UTF-8 的每次启动都包含对所有命名字符实体的字形支持。当前解决此问题的最正确的解决方案是根本不使用命名实体,而是仅提供服务提供UTF-8(严格)并在其中使用实际字符。

这是所有 XML 实体的列表。所有这些都有 UTF-8 字符替代品 - 这就是它们通常呈现的方式。

例如,采取

U+1D6D8, MATHEMATICAL BOLD SMALL CHI            , b.chi
Run Code Online (Sandbox Code Playgroud)

我想在 xml 的某些变体中,您可能有&b.chi什么,搜索MATHEMATICAL BOLD SMALL CHI您会在 fileformat.info 上找到一些页面,其中包含列出了该字符。

或者,在 Windows 中您可以键入Alt+ 1 D 6 D 8(1d68d 来自 XML 实体表),或者在 Linux 中键入Ctrl+ Shift+u 1 D 6 D 8

这将以正确的方式将字符放入您的文档中。