通过SQL从PHP生成XML

通过SQL从PHP生成XML,php,mysql,Php,Mysql,我在运行此代码时出错。。当数据库中没有特殊字符时,我运行良好。如果它有特殊的字符,那么我得到了错误,请解决我,我非常感谢 当数据库中出现诸如“'&?”之类的特殊字符时,就会出现以下错误。我不知道为什么会出现这些错误。。我没有使用DOM或XMLWrite,只是简单地通过文件创建xml,并将CDDATA不适用于我的代码的一件事记录下来,我检查了它。请告诉我一些事情,我如何才能使xml的错误少 代码如下: $file= fopen("../xml/{$productID}.xml" , "w"

我在运行此代码时出错。。当数据库中没有特殊字符时,我运行良好。如果它有特殊的字符,那么我得到了错误,请解决我,我非常感谢

当数据库中出现诸如“'&?”之类的特殊字符时,就会出现以下错误。我不知道为什么会出现这些错误。。我没有使用DOM或XMLWrite,只是简单地通过文件创建xml,并将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);
$file=fopen(“../xml/{$productID}.xml”,“w”);
$_xml=“”;
$_XML=“”;
$_xml.=“”;
而($row=mysql\u fetch\u数组($productQuery,mysql\u ASSOC)){
$_xml.=“”;
$\u xml.=''.$行['productID']。'';
$\u xml.=''.htmlspecialchars($row['productName']);
$\u xml.=''.htmlspecialchars($row['productDescription']);
$\u xml.=''.htmlspecialchars($row['productPic']);
$_xml.=“”;
$\u xml.=''.$行['categoryID'];
$\u xml.=''.htmlspecialchars($row['categoryName']);
$\u xml.=''.htmlspecialchars($row['categoryDiscription']);
$\u xml.=''.htmlspecialchars($row['categoryPic']);
$_xml.=“”;
$\u xml.=''.$行['subcategory id'];
$\u xml.=''.htmlspecialchars($row['subcategory name']);
$\u xml.=''.htmlspecialchars($row['subcategory description']);
$_xml.=“”;
$_xml.=“”;
$_xml.=“”;
}
$_xml.=“”;
fwrite($file,$\uxml);
fclose($文件);

在CDATA中包装您的XML

<![CDATA[your content here]]>


(这还将处理不会被htmlspecialchars()替换的特殊字符)

将XML包装到CDATA中

<![CDATA[your content here]]>


(这还将处理没有被htmlspecialchars()替换的特殊字符)

很难判断您何时没有发布确切的错误。然而,我将尝试做一个狂热的猜测:检查编码。很可能您在数据库中使用的是拉丁瑞典语(AKA-iso8859-1),其余部分使用的是utf8。。。或者维切维萨。我会建议使用utf8的一切,节省您的时间

检查表编码,然后选择连接编码(默认情况下,mysql_*函数可以使用ISO-8859-1进行连接,您应该在发生这种情况时使用),这应该会有所帮助

另外:为什么要连接字符串以生成XML?使用像SimpleXML这样的适当的XML库(请注意还有其他库,您可以检查XMLWriter和许多其他库)是一个更好的主意。链接:和。。。我不能写其他链接,因为我是这里的新手:)谷歌是每个人的朋友


如果你去PEAR,会有更多的内容。

很难判断你什么时候没有发布准确的错误。然而,我将尝试做一个狂热的猜测:检查编码。很可能您在数据库中使用的是拉丁瑞典语(AKA-iso8859-1),其余部分使用的是utf8。。。或者维切维萨。我会建议使用utf8的一切,节省您的时间

检查表编码,然后选择连接编码(默认情况下,mysql_*函数可以使用ISO-8859-1进行连接,您应该在发生这种情况时使用),这应该会有所帮助

另外:为什么要连接字符串以生成XML?使用像SimpleXML这样的适当的XML库(请注意还有其他库,您可以检查XMLWriter和许多其他库)是一个更好的主意。链接:和。。。我不能写其他链接,因为我是这里的新手:)谷歌是每个人的朋友


如果你去PEAR,会有更多的内容。

特殊字符在xml中是非法的,所以你需要在CDATA标记之间包装所有内容

例如:

$\uXML.=”;
请访问->

您的代码应该类似于:

$_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>";
$\uXML.=”;
$_xml.=“”;
$_xml.=“”;
$_xml.=“”;
$_xml.=“”;
$_xml.=“”;
$_xml.=“”;
$_xml.=“”;
$_xml.=“”;
$_xml.=“”;
$_xml.=“”;
$_xml.=“”;
$_xml.=“”;
$_xml.=“”;
$_xml.=“”;
$_xml.=“”;
$_xml.=“”;

如果这不起作用,这意味着还有其他问题,我建议你复制你得到的错误,并把它放在你的答案中,也许可以截图显示数据库中存储的内容。如果您需要帮助,请提供更多详细信息

特殊字符在xml中是非法的,因此您需要在CDATA标记之间包装所有内容

例如:

$\uXML.=”;
请访问->

您的代码应该类似于:

$_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>";
$\uXML.=”;
$_xml.=“”;
$_xml.=“”;
$_xml.=“”;
$_xml.=“”;
$_xml.=“”;
$_xml.=“”;
$_xml.=“”;
$_xml.=“”;
$_xml.=“”;
$_xml.=“”;
$_xml.=“”;
$_xml.=“”;
$_xml.=“”;
$_xml.=“”;
$_xml.=“”;
$_xml.=“”;

如果这不起作用,这意味着还有其他问题,我建议你复制你得到的错误,并把它放在你的答案中,也许可以截图显示数据库中存储的内容。如果您需要帮助,请提供更多详细信息

我并没有确切回答您的问题,但也许您应该看看。这可能取决于您的mysql版本,尤其是如果您可以使用CLI方法访问sql


提到的这篇文章确实描述了通过sql选择获取xml的稍微复杂一些的方法,尽管这种方法在5.0.67(win32)上对我很有效。

我并没有确切地回答你的问题,但也许你应该看看。这位妈妈