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

时间:2014-07-21 07:24:39

标签: php xml

我有以下代码用于在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);

?>

我如何纠正错误的人。请帮助我

2 个答案:

答案 0 :(得分:0)

验证mysql连接的encoding / charset。它可以在活动连接上设置,也可以在数据库服务器配置中配置。

请参阅:http://www.php.net/manual/en/mysqli.set-charset.php

答案 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的总结,请参阅: