在QUERY和CDATA输出中使用MYSQL REPLACE仍然会导致损坏的XML


MYSQL REPLACE in QUERY and CDATA output usage still causes broken XML

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

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

在MySQL查询中,我尝试像这样在这列上使用REPLACE:

REPLACE(PropertyInformation, ''r'n', '') AS PropertyInformation

在PHP脚本中,我还将导出的XML包装在CDATA中,因为我被告知这可以帮助,如下所示:

<Description><![CDATA[' . $PropertyInformation . ']]></Description>

我还像这样在脚本中形成XML:

header("Content-Type: text/xml;charset=UTF-8");
echo '<?xml version="1.0" encoding="UTF-8"?>

结果是坏的,因为您的数据不是UTF-8,即使您声称它是(<?xml version="1.0" encoding="UTF-8"?>)

你需要把你的数据转换成这种格式。

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

  1. 将数据库中的数据转换为UTF-8,或者
  2. convert执行select语句,或者
  3. 在PHP中将数据转换为UTF-8,将数据保留在数据库中。

第一个选项是获取数据库的转储,向其发出iconv转换命令并将其导入。

其次是SELECT CONVERT(latin1column USING utf8) ...

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