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

时间:2015-07-28 14:25:23

标签: php xml character-encoding

我通常可以通过在互联网上搜索自己找到问题的答案,但对于这个问题我不再有任何想法......

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

var url = "idcplg?IdcService=AJAX_SERVICE&Id=" + Id;
$.getJSON(escapeCachingForUrl(url), function(data){

for(var i=0;i<data.length;i++){
  alert("1");
    //some code written
    myMethod(data,function(result){
    alert("2");
    // Need to operate on result
    });
    alert("4");       
    }
    alert("5");
});

function myMethod(data,callback){
var url = "idcplg?IdcService=AJAX_ANOTHER_SERVICE";
                $.getJSON(escapeCachingForUrl(url), { 
                                data : data
                                }, function(data){
                                                alert("3");
                                                callback(data);
                                });
}

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

例如:\ b在黑色背景上插入“BS”(在Notepad ++中)

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

请帮助:)

编辑:只需添加一个“\”是这个特定'\ b'字符的解决方案,但我希望有一个通用的解决方案:

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

在Notepad ++中显示如下:

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

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

2 个答案:

答案 0 :(得分:1)

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

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

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

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

答案 1 :(得分:0)

正如我在编辑中所说,这是一个编码问题。 我正在插入&#39;&lt; ?xml version =&#34; 1.0&#34;编码=&#34; ISO-8859-1&#34; ?&GT;&#39;到XML。

因此SQL数据(UTF-8)正在转换为另一种格式。 现在,我插入&lt; ?xml version =&#34; 1.0&#34;编码=&#34; UTF-8&#34; ?&GT;

XML和SQL数据都是一样的。