【问题标题】:getting warning on xmlelement while writing xml file in php在 php 中写入 xml 文件时收到关于 xmlelement 的警告
【发布时间】:2014-07-21 07:24:39
【问题描述】:

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

?>

我该如何纠正错误,请帮助我

【问题讨论】:

    标签: php xml


    【解决方案1】:

    验证 mysql 连接的编码/字符集。它可以在活动连接上设置或在数据库服务器配置中进行配置。

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

    【讨论】:

    • 我检查了它,它在 mysql 连接上返回 utf8,但是为什么我会收到这个错误
    • @user3843585:最终的原因不是连接,而是实际的字符串。您仍然需要自己验证,设置正确的 mysql 连接字符集是前提条件(这样做不是常见错误,但这只是可能出错的事情之一)。
    • k.k.用函数utf8_encode函数纠正了错误
    • 你没有修复它。 utf8_encode() 在这种情况下只是一种解决方法。
    【解决方案2】:

    至少在这些任务中的一项:

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

    拥有$row['Siteurl'] 一个包含UTF-8编码数据的字符串。

    对于所有分配,SimpleXMLElement 要求数据采用 Unicode 编码为 UTF-8。

    但是,SimpleXMLElement 只会在您使用 asXML() 方法时告诉您(在您的情况下是 $xml-&gt;asXML())。

    如果您现在想找出您分配的哪些字符串数据不是有效的 UTF-8,您必须通过检查每个字符串在分配它之前自行验证这一点。 p>

    您应该在现场现有的问答材料中找到一些有用的信息,例如:

    如果您验证每个字符串并输出错误信息,以防作为分配的隐式前提条件的预期编码不匹配,这样做应该会更清楚。

    Mysql 顺便说一句。如果它不知道更好,就不会费心提供无效序列,因此在这种情况下不会显示错误,只是尽力而为。您可能想要明确地调整您从数据库中获取的某些数据可能只是二进制“编码”,因此被连接字符集忽略。

    有关在 Mysql 中使用真正的 UTF-8 的一个很好的总结,请参阅:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-11-08
      • 1970-01-01
      • 2017-04-10
      • 2012-06-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多