XML解析错误:格式不正确 - 无法找到导致错误的内容

时间:2013-09-18 10:09:04

标签: xml validation parsing

我有以下XML,它在productName节点中收到错误。我已经通过XML验证器运行了这个并删除了部分内容以尝试将其缩小到导致问题但最终无法解决的问题。有人可以帮忙吗?

<?xml version="1.0" ?> 
<product>
<prod_id>8236888</prod_id>
<productURL></productURL>
<productImageURL>2mp_hd_sdi.jpg</productImageURL>
<price>349.99</price>
<category>1646290</category>
<qtyInStock>10</qtyInStock>
<offerType>1</offerType>
<offerPrice>299.99</offerPrice>
<VAT>1</VAT>
<discount>0</discount>
<vat_rate></vat_rate>
<productName>SDI Bullet IR Camera Full HD 1080P 1920x10803.3-12mm Varifocal Lens  1/3&amp;rdquo; 2MP CMOS36 IR LEDs  Outdoor / Indoor</productName>
</product>
  

XML解析错误:格式不正确的位置:   http://www.w3schools.com/xml/xml_validator.asp第14行,列   35:SDI子弹红外摄像机全高清1080P 1920x10803.3-12mm   变焦镜头1/3&amp; rdquo; 2MP CMOS36红外LED户外/   室内   ---------------------------------- ^

1 个答案:

答案 0 :(得分:0)

  

什么是美国分隔符

“单位分隔符”是值为31(十六进制1F)的ASCII控制代码。见https://en.wikipedia.org/wiki/Unit_separator#Field_separators

XML Validator抱怨,因为它不是XML中的有效字符。见https://en.wikipedia.org/wiki/XML#Valid_characters

  

如何在生成XML的PHP​​脚本中检查和删除这些?

从数据库中提取数据后,产品名称可能位于某个字符串中(可能在数组或对象中)。为简单起见,假设它是变量$ product_name的值。要从字符串中删除US,您可以这样做:

$product_name = str_replace("\x1F", "", $product_name);

或者这个:

$product_name = preg_replace( '/\x1F/', '', $product_name);

如果产品名称中可能出现其他XML无效控制代码,则必须对函数调用进行概括以删除它们。

(并确保检查其他数据库字段是否包含控制代码。)