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


How to escape XML's special characters from php exec

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

我添加内容到一个XML文件(这是几个Go)通过php执行命令。我必须这样做因为我需要一个XML来导入Solr Collection中的数据

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

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

。: 'b插入一个"BS"在黑色的黑底(在notepad++)

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

请帮忙:)


编辑:简单地添加一个"'"是这个特定的''b'字符的解决方案,但我想有一个一般的解决方案:

。: $txt = "('b€.......

或d≥3";

在notepad++中显示如下:

(' b¬……或da¥3

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

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

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

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

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

正如我在编辑中所说的,这是一个编码问题。我在插入''到xml

因此SQL数据(UTF-8)正在转换为另一种格式。现在插入.

XML和SQL数据是相同的