我在过去几年中做了很多PHP编程,让我讨厌的一件事就是对Unicode和多字节字符串的弱支持(当然,原则上没有)。 例如,“htmlentities”似乎是PHP世界中一个常用的函数,我发现当你努力保持每个字符串可以本地化时,它只会在你的数据库中存储UTF-8,只提供UTF时会非常烦人-8 webpages等突然间,在你的数据库和浏览器之间的某个地方,这个绝望的天真函数假装每个字节都是一个字符并且混乱了一切。

to just dump this kind of functions, they seem totally superfluous. 我只是径直往这种功能,他们似乎完全是多余的。 这几天仍然需要写'ä' 代替'? 至少我的Firefox似乎非常高兴能够显示最奇怪的亚洲字形,只要它们以适当的编码方式提供。

(as in "&lt;" for "<") 更新:更准确: 都是必需的实体(如“&lt;”表示“<”)

更新2:

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

@Ross:但是在输入时清理用户输入是不是更好,以保持我的输出逻辑免受这些问题的影响? (当然,假设可以对输入进行可靠的消毒 - 但是,如果不是,那么它可以输出吗?)

===============>>#1 票数:7 已采纳

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

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

===============>>#2 票数:3

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

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


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

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

===============>>#3 票数:0

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

  ask by Hanno Fietz translate from so

未解决问题?本站智能推荐:

1回复

JavaScript支持Unicode和VBScript中的isNumeric()函数

我无法为javaScript和VBScript找到支持Unicode的isNumeric()函数。 功能在那里,但不支持unicode。 即使没有支持Unicode的版本,那么两种语言中是否都支持isNumeric()或isDigit()功能?
1回复

可以将不同的QFonts分配给特定的Unicode字符吗?

我需要在QLabel中的同一个字符串中显示几个国际脚本。 例如,QLabel可以显示: چاچيचाचीćāćī(dim.ofćāćā,qv),sf A paternal a aunt(=ćaćī,qv) 上面的字符串包括拉丁文脚本,Perso-Arabic脚本和Deva
4回复

在HTML和CSS中,如何正确使日语文本换行?

我只用HTML和CSS用英语和日语写了一个简单的段落。 英文文本通常会断行(当一个单词不再适合一行时,它将被推到下一个)。 但是,对于日语,并不是将整个单词推到下一行,而只是其中一部分。 我尝试将自动换行设置为断词和常规,但是没有任何变化(日语文本)。 如何使日语中的整个单词像英
1回复

Unicode:从关键字中剥离非字母数字字符

我想规范化关键字以摆脱非字母数字,但同时尊重Unicode。 这是我所拥有的: 我的问题是这是否行得通。 是否有某些语言可以删除重要字符? 还是不会删除不重要的内容? 我只需要文字-没有符号或标点符号。 数字还可以。 我不知道标记是什么,也不确定是否应该过滤其他类
2回复

有关如何解决现有数据库中的unicode,语言问题的建议

我有一个客户,他弄乱了他数据库中的字符(我继承了这个项目,我的猜测是,当用户输入文本时,无论是通过PHP还是MySQL或两者都不被正确处理或正确存储)。 例如, 示例1:数据库字段(“关于”)的值如下所示: Dans la nature,face au ciel,un b%uFFF
1回复

SimpleXML以奇怪的方式输出unicode

我使用simpleXML来处理xml文件。 它有西里尔字符。 我还使用dom_import_simplexml , importNode和appendChild将树从一个文件复制到另一个文件并放置到位。 在处理结束时,我执行了simpleXmlElement print_r ,一切正常。
1回复

如何获取包含PHP中组合字符的Unicode字符串的“渲染长度”?

考虑到并非所有unicode组合字符都具有等效的预组合字符(NFC),有没有办法使用PHP获取字符串的“渲染”长度,如果这是可能的/使语义有意义? http://3v4l.org/L1kPl (使用php7转义语法) 到目前为止我取得了什么:http: //3v4l.org/4NS
2回复

preg_match unicode不适用于某些语言

使用此正则表达式无法验证以下语言的文本: 无效的语言: 与PHP的preg_match 。 我想念什么?
2回复

如何模拟尚未实现的 HTML标记?

HTML5中<bdi>标记的目的是将双向文本与其上下文隔离开来。 这正是我正在寻找的。 从左到右的用户名显示如下: 使用从右到左的用户名会变成这个可怕的东西: 甚至更糟糕,取决于上下文,向后显示周围的一切(而不仅仅是用户的名字)。 问题是没有浏览器支持&
3回复

规范多字节php字符串中的整数值

可以说我有UTF-8字符串0123456789०१२३४५६७८९০১২৩৪৫৬৭৮৯ 。 我想将所有非ASCII整数值替换为其等效的ASCII,这样提供的字符串将变为012345678901234567890123456789 。 我将如何去做呢?