【问题标题】:Are named entities in HTML still necessary in the age of Unicode aware browsers?在支持 Unicode 的浏览器时代仍然需要 HTML 中的命名实体吗?
【发布时间】:2010-09-06 17:03:01
【问题描述】:

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

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

更新: 更准确地说:命名实体是显示 HTML 标记以外的任何东西所必需的(如“<”中的“

更新 2:

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

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

【问题讨论】:

    标签: php html unicode internationalization


    【解决方案1】:

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

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


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

    没错。当然,除非有愚蠢的限制,例如在 UTF-8 等上阻塞的遗留数据库驱动程序。

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        【解决方案3】:

        Safari 似乎在某些字形上存在问题,但在其他字形上没有问题,它可能不是需要,但最好这样做,当然,这是我的观点,除了我的以外没有任何支持自己的观察。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-12-03
          • 2011-12-19
          • 2011-01-16
          • 1970-01-01
          • 2015-06-28
          • 2013-04-23
          • 2011-04-18
          相关资源
          最近更新 更多