2014-07-21 22 views
0

我有以下與我在PHP編寫的XML文件中的代碼,但是當我運行這段代碼,我得到以下錯誤獲取有關XMLELEMENT警告,而在PHP編寫XML文件

SimpleXMLElement::asXML(): string is not in UTF-8 

代碼生成XML如下所示

<?php 

    //Create Database connection 
    $mysqli = new mysqli('localhost', 'user', 'pass', 'dbnam'); 

    if(mysqli_connect_errno()) { 
     echo "Connection Failed: " . mysqli_connect_errno(); 
     } 
$query='select Siteurl from tablename order by colname2 desc '; 

    $result = mysqli_query($mysqli,$query); 

    //Create SimpleXMLElement object 
    $xml = new SimpleXMLElement('<urls/>'); 

    //Add each column value a node of the XML object 
    while($row = mysqli_fetch_array($result)) { 
     $mydata = $xml->addChild('url'); 
     $mydata->loc=$row['Siteurl']; 
    } 

    mysqli_close($mysqli); 
    //Create the XML file 
    $fp = fopen("sitemaps/sitemap2.xml","wb"); 

    //Write the XML nodes 
    fwrite($fp,$xml->asXML()); 

    //Close the database connection 
    fclose($fp); 

?> 

我怎樣才能糾正錯誤guys.Please幫我

回答

0

驗證MySQL連接的編碼/字符集。它可以在活動連接上進行設置或在數據庫服務器配置中進行配置。

參見:http://www.php.net/manual/en/mysqli.set-charset.php

+0

我檢查,對MySQL連接其返回UTF8,但爲什麼即時得到這個錯誤,那麼 – user3843585

+0

@ user3843585:不是連接最終是原因,而是實際的字符串。你仍然需要自己驗證,設置正確的mysql連接字符集是一個先決條件(而不是這樣做的一個常見錯誤,但它只是其中一個可能出錯的東西)。 – hakre

+0

k.k。用函數utf8_encode函數修改錯誤 – user3843585

0

在這些許多分配中的至少一個:

$mydata->loc = $row['Siteurl']; 

由具有$row['Siteurl']一個字符串,不包含UTF-8編碼的數據。

對於所有作業,SimpleXMLElement預計數據將被Unicode編碼爲UTF-8。

然而,的SimpleXMLElement只會告訴你的那一刻,你使用asXML()方法(在你的情況是$xml->asXML())。

如果你現在想知道你分配的哪一個字符串數據不是有效的UTF-8,你必須通過在之前檢查每個字符串來驗證它。

你應該找到一些有用的信息如何做,在現有的Q &這裏現場的材料,例如:

做到這一點應該擺脫更多的光如果您驗證每個字符串並輸出錯誤信息,以防預期編碼作爲分配的隱式前提條件不匹配。

Mysql btw。如果它不知道更好,就不會麻煩地傳遞無效序列,所以不會在這種情況下顯示錯誤,只是盡力而爲。您可能需要明確調整從數據庫中獲取的某些數據可能只是二進制「編碼」,因此會被連接字符集忽略。

對於使用真正的UTF-8與MySQL的一個很好的總結,請參閱: