在php中编写xml文件时收到xmlelement警告


getting warning on xmlelement while writing xml file in php

我用以下代码在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