Php 在查询和CDATA输出中使用MYSQL替换仍然会导致XML损坏

Php 在查询和CDATA输出中使用MYSQL替换仍然会导致XML损坏,php,mysql,xml,Php,Mysql,Xml,我有一个PHP脚本,用于查询MySQL数据库并以XML格式输出显示该信息 我有一个我无法控制的麻烦列(我只能选择)。此列用字符返回等填充 在MySQL查询中,我尝试在这个列上使用REPLACE,如下所示: REPLACE(PropertyInformation, '\r\n', '') AS PropertyInformation <Description><![CDATA[' . $PropertyInformation . ']]></Description&

我有一个PHP脚本,用于查询MySQL数据库并以XML格式输出显示该信息

我有一个我无法控制的麻烦列(我只能选择)。此列用字符返回等填充

在MySQL查询中,我尝试在这个列上使用REPLACE,如下所示:

REPLACE(PropertyInformation, '\r\n', '') AS PropertyInformation
<Description><![CDATA[' . $PropertyInformation . ']]></Description>
在PHP脚本中,我还将导出的XML包装在CDATA中,因为我被告知这可能会有所帮助,如下所示:

REPLACE(PropertyInformation, '\r\n', '') AS PropertyInformation
<Description><![CDATA[' . $PropertyInformation . ']]></Description>

我还在脚本中形成如下XML:

header("Content-Type: text/xml;charset=UTF-8");
echo '<?xml version="1.0" encoding="UTF-8"?>
标题(“内容类型:text/xml;charset=UTF-8”);
回声'

结果被破坏,因为您的数据不是UTF-8,即使您声称它是(

您需要将数据转换为此格式

有三种方法可以做到这一点

  • 将数据库中的数据转换为UTF-8,或
  • 转换为执行select语句,或
  • 在PHP中将数据转换为UTF-8,使数据库中的数据保持原样
  • 第一种方法是转储数据库,对其发出iconv转换命令并将其导入回数据库

    其次,您可以使用
    选择CONVERT(使用utf8的拉丁1列).


    第三,假设您的数据是ISO-8859-1,您将再次使用iconv:
    $converted=iconv(“ISO-8859-1”,“UTF-8”,“$text”)

    将问题改回原来的位置,只会让人看不懂你的问题……我个人第一次认为这是有道理的。我又调整了一下。更有意义,希望我能得到一些帮助。它坏了,因为它不是有效的UTF-8。请尝试将数据转换为UTF-8。@eis在形成XML输出时,我指定此选项。这就是你的意思吗?标题(“内容类型:text/xml;字符集=UTF-8”);echo'@RoccoTheTaco是的,它指定您声称数据是什么字符集。但是你也必须遵守你指定的,你的数据必须是UTF-8,如果你这么说的话;我得到了同样的结果…我需要转换整个数据库吗?我确认该列为
    PropertyInformation
    text collate utf8\u unicode\u ci注释“Property Information”,数据库本身为65001(UTF-8)@eis@RoccoTheTaco首先,如果您计划转换数据库内容,请在进行任何转换之前先进行备份,然后在进行转换之前先计划所做的工作。:)如果你不小心,你可能会弄乱你的数据。第二,调查你现在有什么字符集。数据是否因为不是任何类型的有效字符或某些适当的字符集而被弄乱了?…是的,当前数据库显示其65001(UTF-8),表的属性是PropertyInformation text collate utf8\u unicode\u ciBoom!我有两个专栏引起了一个问题。。。使用查询中的SELECT CONVERT(使用utf8的拉丁1列)修复。太棒了,谢谢!