【问题标题】:PHP generated XML shows invalid Char value 27 messagePHP 生成的 XML 显示无效的 Char 值 27 消息
【发布时间】:2012-08-27 02:40:25
【问题描述】:

我正在使用 PHP 库生成 XML,如下所示:

$dom = new DOMDocument("1.0","utf-8");

执行上述操作会生成一个在输出顶部显示消息的页面。

此页面包含以下错误: 第 16 行第 274505 列的错误:PCDATA 无效字符值 27 下面是出现第一个错误之前的页面渲染。

我尝试过使用 Tidy 库进行纠正.. 使用 iconv 来获取 UTF-8 中的汉字。

【问题讨论】:

  • 请添加重现错误的最小 (!) 代码示例。

标签: php character-encoding xml-parsing runtime-error tidy


【解决方案1】:

本网站建议使用一个有用的功能来消除该错误。 http://www.phpwact.org/php/i18n/charsets#common_problem_areas_with_utf-8

当您将 utf-8 编码的字符串放入 XML 文档时,您应该记住并非所有 utf-8 有效字符都可以在 XML 文档中被接受 http://www.w3.org/TR/REC-xml/#charsets

所以你应该去掉不需要的字符,否则你会遇到像上面这样的 XML 致命解析错误

function utf8_for_xml($string)
{
    return preg_replace ('/[^\x{0009}\x{000a}\x{000d}\x{0020}-\x{D7FF}\x{E000}-\x{FFFD}]+/u', ' ', $string);
}

希望能帮别人节省一些时间..

【讨论】:

  • 非常感谢。我很惊讶 php xml writer 自己不做这些事情。
  • 这是 ruby 中的等效清理功能,以防有人发现它有用:sring.gsub(/[^\u{0009}\u{000a}\u{000d}\u{0020}-\u{D7FF}\u{E000}-\u{FFFD}]+/u, ' ') ... 或者,更有效地,这也可以通过以下方式实现:@ 987654325@
  • 非常感谢 Prashant!
  • 这太棒了。我看到我已经喜欢这个了。我想再给你一个赞。
  • 我因此浪费了 2 天。非常感谢!
【解决方案2】:

Prashant 是绝对正确的。您还可以通过以下方式去除 Javascript 中的无效字符:

function utf8_for_xml(inputStr) {
  return inputStr.replace(/[^\x09\x0A\x0D\x20-\xFF\x85\xA0-\uD7FF\uE000-\uFDCF\uFDE0-\uFFFD]/gm, '');
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-23
    • 2015-09-19
    • 1970-01-01
    • 2023-04-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多