一尘不染

htmlentities()是否足以创建xml安全值?

php

我正在从头开始构建XML文件,并且需要知道htmlentities()是否会转换每个可能破坏XML文件(可能还有UTF-8数据)的字符?

这些值将来自twitter / flickr提要,因此我需要确保-


阅读 248

收藏
2020-05-29

共1个答案

一尘不染

htmlentities() 这不是
构建合法XML的保证方法。

如果您只担心这,请使用htmlspecialchars()代替htmlentities()。如果您的数据表示形式与XML文档的编码形式之间存在编码不匹配的情况,则htmlentities()可以解决/覆盖它们(这样做会使XML大小变大)。我相信最好保持一致并只使用htmlspecialchars()

另外,请注意,如果将htmlspecialchars()内部用单引号引起来的XML属性的返回值作为泵浦,则还需要传递该ENT_QUOTES标志,以便对源字符串中的任何单引号也进行正确编码。我建议无论如何都要这样做,因为这会使您的代码不受将来有人对XML属性使用单引号引起的错误的影响。

编辑: 澄清:

htmlentities()会将许多非ANSI字符(我想这就是UTF-8数据的意思)转换为实体(仅用ANSI字符表示)。但是,它不能对没有相应实体的任何字符执行此操作,因此不能保证其返回值仅由ANSI字符组成。这就是为什么我建议不要使用它。

如果可能存在编码问题,请明确处理(例如,使用iconv())。

编辑2 :考虑到乔什·戴维斯(Josh Davis)以下的评论,改进了答案。

2020-05-29