在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验证"发出错误消息,现在是警告。
相关文章