17

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

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

更新:更准确地说:除了显示 HTML 标记之外,命名实体是否是必需的(如“<”中的“<”)

更新 2:

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

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

4

3 回答 3

7

Named entities in "real" XHTML (i.e. with application/xhtml+xml, rather than the more frequently-used text/html compatibility mode) are discouraged. Aside from the five defined in XML itself (&lt;, &gt;, &amp;, &quot;, &apos;), they'd all have to be defined in the DTD of the particular DocType you're using. That means your browser has to explicitly support that DocType, which is far from a given. Numbered entities, on the other hand, obviously only require a lookup table to get the right Unicode character.

As for whether you need entities at all these days: you can pretty much expect any modern browser to support UTF-8. Therefore, as long as you can guarantee that the database, the markup and the web server all agree to serve that, ditch the entities.

于 2008-08-24T16:44:04.450 回答
3

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

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


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

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

于 2008-08-24T16:17:09.723 回答
0

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

于 2008-08-24T16:07:07.987 回答