我有以下代码用于在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);
?>
我如何纠正错误的人。请帮助我
答案 0 :(得分:0)
验证mysql连接的encoding / charset。它可以在活动连接上设置,也可以在数据库服务器配置中配置。
答案 1 :(得分:0)
至少在其中一项任务中:
$mydata->loc = $row['Siteurl'];
让$row['Siteurl']
字符串不包含UTF-8编码数据。
对于所有分配, SimpleXMLElement 要求将数据Unicode编码为UTF-8。
但是, SimpleXMLElement 只会告诉您使用 asXML()方法的时刻(在您的情况下是$xml->asXML()
)。
如果您现在想要找出您分配的哪个字符串数据无效UTF-8,您必须通过在分配之前检查每个字符串来自行验证。
您应该在现场的现有Q&amp; A材料中找到一些有用的信息,例如:
如果您验证每个字符串并输出错误信息,并且预期编码作为分配的隐含前提条件不匹配,那么应该放弃更多的亮点。
Mysql btw。如果它不知道更好,就不会费心去传递无效的序列,因此在这种情况下不会显示错误,只是尝试最好。您可能希望明确地调整或从数据库中获取的某些数据可能只是二进制“编码”,因此被连接字符集忽略。
有关使用真正的UTF-8和Mysql的总结,请参阅: