在 Unicode 感知浏览器的时代,HTML 中的命名实体是否仍然必要?

2022-08-30 23:42:05

在过去的几年里,我做了很多PHP编程,有一件事让我很烦恼,那就是对Unicode和多字节字符串的支持很弱(可以肯定的是,本地没有)。例如,“htmlentities”似乎是PHP世界中一个经常使用的函数,我发现当你努力保持每个字符串的可本地化性,只将UTF-8存储在数据库中,只提供UTF-8网页等时,它绝对令人讨厌。突然之间,在你的数据库和浏览器之间的某个地方,有一个无可救药的天真函数,假装每个字节都是一个字符,把一切都搞砸了。

我只想转储这种功能,它们似乎完全是多余的。现在是否仍然需要写“ä”而不是“ä”?至少我的Firefox似乎非常乐意显示即使是最奇怪的亚洲字形,只要它们以正确的编码提供。

更新:更准确地说:除了显示 HTML 标记之外,命名实体对于其他任何操作都是必需的吗(如“<”中的“<”)

更新 2:

@Konrad:你是说,不,不需要命名实体吗?

@Ross:但是,在输入用户输入时对其进行清理,以使我的输出逻辑免受此类问题的影响,不是更好吗?(当然,假设对输入进行可靠的消毒是可能的 - 但是,如果不是,它可以在输出上吗?


答案 1

不鼓励使用“真实”XHTML 中的命名实体(即 with ,而不是更常用的兼容模式)。除了在XML本身中定义的五个(,,,,),它们都必须在你正在使用的特定DocType的DTD中定义。这意味着您的浏览器必须明确支持该DocType,这与给定的DocType相去甚远。另一方面,编号实体显然只需要一个查找表即可获得正确的 Unicode 字符。application/xhtml+xmltext/html&lt;&gt;&amp;&quot;&apos;

至于你现在是否需要实体:你几乎可以期望任何现代浏览器都支持UTF-8。因此,只要你能保证数据库,标记和Web服务器都同意提供这些服务,就抛弃实体。


答案 2

如果使用XHTML,实际上建议不要使用命名实体([需要引用])。一些浏览器(Firefox...)在将其解析为XML时(它们通常不会这样做),不会读取DTD文件,因此无法处理实体。

由于如果没有令人信服的理由,最好使用UTF-8作为编码,这只意味着文档的创建者需要一个体面的编辑器,不仅可以处理文档,还可以提供输入div字形的好方法。OS X实际上并没有这个问题,因为大多数需要的字形可以通过“alt”键访问,但Windows没有此功能。


@Konrad:你是说,不,不需要命名实体吗?

正是。当然,除非存在愚蠢的限制,例如在UTF-8上阻塞的旧数据库驱动程序等。


推荐