【问题标题】:Formatting string for xml attribute in phpphp中xml属性的格式化字符串
【发布时间】:2010-08-12 11:40:40
【问题描述】:

我的数据库中有一些有效的字符串,但是当我将它们包含在 UTF-8 XML 输出的属性中时,它们会给我以下错误:

XML 解析错误:格式不正确

我当前的代码(简化):

header('Content-Type: text/xml'); 
echo '<?xml version="1.0" encoding="UTF-8" standalone="yes"?>';
echo '<root attribute="' . htmlentities($string_from_hell) . '">'; 

在将它们包含在 XML 属性中之前,我应该如何格式化这些字符串?

$string_from_hell 的可能值:(不知道它是否会正确显示)

【问题讨论】:

  • 我不会在这里使用“消毒”这个词。 “格式化”对我来说似乎更合适。
  • @Col。弹片你是对的。已编辑。

标签: php xml string encoding utf-8


【解决方案1】:

试试

htmlspecialchars($string_from_hell, ENT_QUOTES, "UTF-8")

htmlentities 不会这样做,因为它将创建在 XML 中无法识别的 HTML 实体,只有 HTML。您还应该指定字符集,因为默认不是 UTF-8,而是 ISO-8859-1。

您还缺少属性值周围的引号 (")。

还有更好的方法来创建为您处理转义的 XML 文件。参见例如XMLWriter.

【讨论】:

  • 我认为真正的答案应该是使用适当的 DOM API 来构造 XML 而不是字符串连接。据我所知,OP的代码也错过了属性值周围的引号。
  • @Johan 你说得对,我错过了引号。至于 DOM API,我认为 XML 构建不必要地复杂(且效率低下),除非您之后需要完整的 DOM 树。
  • 不知道这些 API 在 PHP 中的外观。但是类似 SAX 的东西也可能就足够了(XMLWriter 似乎就是这样)。我在 XML 中没有做那么多,所以请原谅不准确:-)
猜你喜欢
  • 1970-01-01
  • 2011-04-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多