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

在php中编写xml文件时收到关于xmlelement的警告,php,xml,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

我使用以下代码在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连接的编码/字符集。它可以在活动连接上设置,也可以在数据库服务器配置中配置


请参阅:

,了解这些作业中的至少一项:

$mydata->loc = $row['Siteurl'];
正在使用
$row['Siteurl']
一个不包含UTF-8编码数据的字符串

对于所有赋值,SimpleXMLElement希望数据以Unicode编码为UTF-8

但是,simplexmlement只会告诉您使用asXML()方法的时刻(在您的例子中是
$xml->asXML()

如果您现在想找出您分配的哪个字符串数据是无效的UTF-8,您必须在分配之前通过检查每个字符串来自己验证这一点

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

如果您验证了这些字符串中的每一个,并在预期的编码作为赋值的隐式前提条件不匹配的情况下输出错误信息,那么这样做应该会有更大的帮助

顺便说一句,如果Mysql不知道如何更好地传递无效的序列,它不会费心,所以在这种情况下不会显示错误,只是尽最大努力。您可能需要显式地调整,或者从数据库中获取的某些数据可能只是二进制的“编码”,因此被连接字符集忽略

有关将true UTF-8与Mysql结合使用的详细信息,请参阅:


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