我用以下代码在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);
?>
伙计们,我该怎么纠正错误呢。请帮助我
验证mysql连接的编码/字符集。它可以在活动连接上设置,也可以在数据库服务器配置中配置。
请参阅:http://www.php.net/manual/en/mysqli.set-charset.php
在这许多分配中的至少一个上:
$mydata->loc = $row['Siteurl'];
$row['Siteurl']
是一个不包含UTF-8编码数据的字符串。
对于所有赋值,SimpleXMLElement都希望数据以Unicode编码为UTF-8。
但是,SimpleXMLElement只会在您使用asXML((方法时告诉您(在您的情况下是$xml->asXML()
(。
如果你现在想找出你分配的字符串数据中哪一个是无效的UTF-8,你必须在分配前检查每个字符串来自己验证这一点。
你应该在现有的问答中找到一些有用的信息;现场的材料,例如:
- 如何在PHP中检测格式错误的utf-8字符串
- 检查字符串是否编码为UTF-8
如果您验证这些字符串中的每一个并输出错误信息,以防作为赋值的隐式前提条件的预期编码不匹配,那么这样做应该会有更多的启示。
如果Mysql-btw.不知道的话,它不会麻烦传递无效序列,所以在这种情况下不会显示错误,只是尽最大努力。您可能需要明确地调整或,从数据库中获得的某些数据可能只是二进制"编码"的,因此会被连接字符集忽略。
有关在Mysql中使用真正的UTF-8的好摘要,请参阅:
- 如何在MySQL数据库中支持完整的Unicode