运行此代码时出错。我在数据库中没有特殊字符时运行正常。如果它有特殊字符然后我得到错误请解决我,我非常感谢。
当数据库中的任何特殊字符如“'&?”时出现以下错误我没有为什么会出现这些错误..而且我没有使用DOM或XMLWrite只是简单地通过文件创建xml,并且clerify 1件事CDDATA也不适用于我的代码我检查它。请告诉我一些如何使错误更少的xml ..
以下是代码:
$file= fopen("../xml/{$productID}.xml" , "w");
$_xml ="<?xml version=\"1.0\" encoding=\"UTF-8\" ?>";
$_XML = "<!DOCTYPE Server SYSTEM \"opt/pdos/etc/pdoslrd.dtd\">";
$_xml .="<productsnode>";
while ($row = mysql_fetch_array($productQuery, MYSQL_ASSOC)) {
$_xml .=" <product>";
$_xml .=" <productID>" . $row['productID'] . "</productID>";
$_xml .=" <productName>" . htmlspecialchars($row['productName']) . "</productName>";
$_xml .=" <productDescription>" . htmlspecialchars($row['productDescription']) . "</productDescription>";
$_xml .=" <productPicture>" . htmlspecialchars($row['productPic']) . "</productPicture>";
$_xml .=" <category>";
$_xml .=" <categoryID>" . $row['categoryID'] . "</categoryID>";
$_xml .=" <categoryName>" . htmlspecialchars($row['categoryName']) . "</categoryName>";
$_xml .=" <categoryDescription>" . htmlspecialchars($row['categoryDiscription']) . "</categoryDescription>";
$_xml .=" <categoryPicture>" . htmlspecialchars($row['categoryPic']) . "</categoryPicture>";
$_xml .=" <subCategory>";
$_xml .=" <subCategoryID>" . $row['subCategoryID'] . "</subCategoryID>";
$_xml .=" <subCategoryName>" . htmlspecialchars($row['subCategoryName']) . "</subCategoryName>";
$_xml .=" <subCategoryDetail>" . htmlspecialchars($row['subCategoryDescription']) . "</subCategoryDetail>";
$_xml .=" </subCategory>";
$_xml .=" </category>";
$_xml .=" </product>";
}
$_xml .="</productsnode>";
fwrite($file, $_xml);
fclose($file);
答案 0 :(得分:2)
将您的XML包装在CDATA中
<![CDATA[your content here]]>
(这也将处理未被htmlspecialchars()取代的特殊字符)
答案 1 :(得分:1)
特殊字符在xml中是非法的,因此您需要在CDATA标记之间包装所有内容
例如:
$_xml .=" <subCategoryName><![CDATA[" . htmlspecialchars($row['subCategoryName']) . "]]></subCategoryName>";
阅读更多内容 - &gt; http://www.w3schools.com/xml/xml_cdata.asp
你的代码应该是这样的:
$_xml .=" <product>";
$_xml .=" <productID><![CDATA[" . $row['productID'] . "]]></productID>";
$_xml .=" <productName><![CDATA[" . htmlspecialchars($row['productName']) . "]]></productName>";
$_xml .=" <productDescription><![CDATA[" . htmlspecialchars($row['productDescription']) . "]]></productDescription>";
$_xml .=" <productPicture><![CDATA[" . htmlspecialchars($row['productPic']) . "]]></productPicture>";
$_xml .=" <category>";
$_xml .=" <categoryID><![CDATA[" . $row['categoryID'] . "]]></categoryID>";
$_xml .=" <categoryName><![CDATA[" . htmlspecialchars($row['categoryName']) . "]]></categoryName>";
$_xml .=" <categoryDescription><![CDATA[" . htmlspecialchars($row['categoryDiscription']) . "]]></categoryDescription>";
$_xml .=" <categoryPicture><![CDATA[" . htmlspecialchars($row['categoryPic']) . "]]></categoryPicture>";
$_xml .=" <subCategory>";
$_xml .=" <subCategoryID><![CDATA[" . $row['subCategoryID'] . "]]></subCategoryID>";
$_xml .=" <subCategoryName><![CDATA[" . htmlspecialchars($row['subCategoryName']) . "]]></subCategoryName>";
$_xml .=" <subCategoryDetail><![CDATA[" . htmlspecialchars($row['subCategoryDescription']) . "]]></subCategoryDetail>";
$_xml .=" </subCategory>";
$_xml .=" </category>";
$_xml .=" </product>";
如果这不起作用,则表示还有其他内容,我建议您复制所获得的错误并将其放入您的答案中,并可能截取数据库中存储的内容。如果您需要帮助,请提供更多详细信息
答案 2 :(得分:0)
当你没有发布确切的错误时,非常难以分辨。但是,我会尝试做一个狂热的猜测:检查编码。您可能在数据库中使用拉丁瑞典语(AKA-ISO 8859-1),其余时间使用utf8 ......或者反之亦然。我建议使用utf8来节省时间。
检查表格编码,然后连接编码(默认情况下mysql_ *函数可以使用ISO-8859-1进行连接,如果发生这种情况你应该使用http://php.net/manual/en/function.mysql-set-charset.php),这应该会有所帮助。
另外:为什么要连接字符串以生成XML?使用像SimpleXML这样的适当XML库是一个更好的想法(请注意,还有其他库,您也可以检查XMLWriter以及其他许多库)。链接:http://mx.php.net/manual/en/book.simplexml.php和...我不能写另一个链接,因为我是这里的新手:)谷歌是每个人的朋友。
如果你去梨花,还有更多的东西。
答案 3 :(得分:0)
我并没有完全回答你的问题,但也许你应该看看mysql xml abilities。这可能取决于您的mysql版本,特别是如果您可以使用CLI方法访问您的sql。
上面提到的文章确实描述了通过sql选择获取xml的更复杂的方法虽然在5.0.67(win32)上对我有用。