我正在从头开始构建XML文件,并且需要知道htmlentities()是否会转换每个可能破坏XML文件(可能还有UTF-8数据)的字符?
这些值将来自twitter / flickr提要,因此我需要确保-
htmlentities() 这不是 构建合法XML的保证方法。
htmlentities()
如果您只担心这,请使用htmlspecialchars()代替htmlentities()。如果您的数据表示形式与XML文档的编码形式之间存在编码不匹配的情况,则htmlentities()可以解决/覆盖它们(这样做会使XML大小变大)。我相信最好保持一致并只使用htmlspecialchars()。
htmlspecialchars()
另外,请注意,如果将htmlspecialchars()内部用单引号引起来的XML属性的返回值作为泵浦,则还需要传递该ENT_QUOTES标志,以便对源字符串中的任何单引号也进行正确编码。我建议无论如何都要这样做,因为这会使您的代码不受将来有人对XML属性使用单引号引起的错误的影响。
ENT_QUOTES
编辑: 澄清:
htmlentities()会将许多非ANSI字符(我想这就是UTF-8数据的意思)转换为实体(仅用ANSI字符表示)。但是,它不能对没有相应实体的任何字符执行此操作,因此不能保证其返回值仅由ANSI字符组成。这就是为什么我建议不要使用它。
如果可能存在编码问题,请明确处理(例如,使用iconv())。
iconv()
编辑2 :考虑到乔什·戴维斯(Josh Davis)以下的评论,改进了答案。