w3c php的转义符,根据PHP中的W3C规范化Unicode

在W3C validator中验证我网站的HTML代码时,我收到了以下警告:

Line 157, Column 220: Text run is not in Unicode Normalization Form C.

…i͈̭̋ͥ̂̿̄̋̆ͣv̜̺̋̽͛̉͐̀͌̚e͖̼̱ͣ̓ͫ͆̍̄̍͘-̩̬̰̮̯͇̯͆̌ͨ́͌ṁ̸͖̹͎̱̙̱͟͡i̷̡͌͂͏̘̭̥̯̟n̏͐͌̑̄̃͘͞…

我正在PHP 5.3.x中开发它,所以我可以使用Normalizer类.

所以,为了解决这个问题,我应该在显示用户输入的任何输入时使用Normalizer :: normalize($output)(例如注释),还是应该在存储之前对任何用户输入使用Normalizer :: normalize($input)它在数据库中?

tl; dr:我应该在将用户输入存储在数据库中之前还是仅在显示时使用Unicode normalization?

解决方法:

您可以根据应用程序的目的和性质来决定是在读取用户输入时应用规范化,还是将其存储到数据库中,或者在编写时,或者根本不应该.总结问题评论中提到的长线程,也可以在http://validator.w3.org/feedback.html的官方列表存档中找到

>警告信息来自实验性的“HTML5验证”(实际上是一个短信,除了一些正式的测试之外还应用主观规则).

>该消息不是基于HTML5草案中的任何要求,而是基于对可能导致某些软件出现问题的意见.

>最初的意见“HTML5验证”发出错误信息,现在是一个警告.

尽管不常见,将非标准化数据作为用户输入是可能的.这不依赖于浏览器执行的规范化(它们不会做这些事情,尽管可能在将来可能会这样做),而是依赖于输入方法和习惯.例如,键入字母ü(u umlaut或u with diaeresis)的方法往往会产生预组合形式的字符,如规范化.人们可以将它生成为非标准化的,分解形式,如字母u,然后结合分离,但他们通常没有理由这样做,大多数人甚至不知道如何做到这一点.

如果您在软件中进行字符串比较,它们可能会或可能不会(取决于所使用的比较例程)处理,例如预组合ü等于分解的表示.简单的实现将它们视为不同的,因为它们在简单的字符级别(Unicode代码点)上肯定是不同的.

在最近的写作阶段,在某些时候进行标准化的一个原因是预组合字符通常会更可靠地显示.要呈现标准化的ü,程序只需从字体中获取字形.为了呈现一个分解的ü,一个程序必须要么将它识别为规范化的ü,或者用正确放置在它上面的分音符号写出字母u,并适当注意字形的图形属性,并且许多程序失败在这.

另一方面,在作为用户输入接收非标准化数据的极少数情况下,用户可能有理由产生它.他可能认为归一化ü和非归一化ü是不同的,需要对其进行处理.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值