如何从 php exec 中转义 XML 的特殊字符

How to escape XML's special characters from php exec

我一般都是通过网上搜索自己找到问题的答案,但是对于这个问题我已经没有任何想法了...

我正在通过 php exec 命令将内容添加到 XML 文件(这是几个 Go)。 我必须这样做,因为我需要一个 XML 来导入我的 Solr 集合中的数据

<?php
$cmd = "echo '\b' > /windowsShare/solr_update_20150728.xml";
var_dump($cmd);
//exec($cmd);
passthru($cmd);

奇怪的行为是,如果我 "manually" 运行 输出,我的 XML 是有效的... 但是不知何故,当我通过 php 执行它时,它插入了一些特殊字符(无效字符)。

例如:\b 在黑色背景上插入一个 "BS"(在 Notepad++ 中)

我已经试过了: htmlspecialchars (addSlashes('\b'), ENT_XML1)

求求你帮忙:)


编辑:简单地添加一个“\”是这个特定'\b'字符的解决方案,但我想要一个通用的解决方案:

例如:$txt = "(\b €......或d≥3";

在Notepad++中显示为:

(\b €....... 或 dâ¥3

注意:我感觉这是一个编码问题...(当我将编码更改为 UTF8 时它显示得很好)

您想在 xml 中添加文字 \b 字符吗?由于您使用的是 " 引号字符串,因此 \b 被视为退格键。你必须双重转义:

$cmd = "echo '\b' > /windowsShare/solr_update_20150728.xml";
              ^^

您可以切换到使用 ' 引号字符串,其中 \b 没有特殊含义,但您还必须转义回显引号:

$cmd = 'echo \'\b\' > /windowsShare/solr_update_20150728.xml';

正如我在编辑中所说,这是一个编码问题。 我正在插入 '< ?xml version="1.0" encoding="ISO-8859-1" ?>' 到 XML.

因此 SQL 数据 (UTF-8) 正在转换为另一种格式。 现在,我插入 < ?xml version="1.0" encoding="UTF-8" ?>.

而且XML和SQL的数据是一样的