linux命令:坏替换

时间:2016-04-01 06:41:26

标签: php bash

我有一个php脚本,它从我的数据库获取数据并使用exec命令创建XML(在Linux OS上)。

我知道这不是创建它的更好方法,我稍后会更新:)

无论如何,我的问题是它提供错误'错误替换'。

这是一个简单的PHP代码,可以显示错误... 您可以注意到,为了创建“有效的XML”(即:格式良好),我手动转义一些特殊的字符:

<?php
$field="\${sao{}}\$";
$fieldParsed.=  str_replace(
    array("&",     "<",    ">",    '"',      "'",       "\\",   "`"),
    array("&amp;", "&lt;", "&gt;", "&quot;", "&apos;",  "\\\\", "&#96;"), 
    $field
);
$data="<doc><field name=\"myname\">".$fieldParsed."</field></doc>";
$cmd='echo "'.addSlashes($data).'" >> /tmp/test.txt';
echo "\n\n".$cmd. "\n\n";
exec($cmd);

有没有办法避免$ data的“bash解释”? 即:简单地把它当成......

注意:此代码只是一个示例,因此转义$将不是有效的答案。我正在寻找一般解决方案(如果有的话)......

感谢。

1 个答案:

答案 0 :(得分:0)

我认为解决方案是...... escapeshellcmd

但不是......因为这会插入,例如{而不是{

然而,问题似乎是带双引号的回声(&#34;)。 和php一样,echo用单引号保持字符串完整...(不像echo&#34; my $ var&#34;)

如果我使用带有单引号的回声(&#39;),它可以正常工作。

所以代码类似于:

<?php
$field="\${sao{}}\$";
$fieldParsed.=  
  str_replace(
    array("&",     "<",    ">",    '"',      "'"),
    array("&amp;", "&lt;", "&gt;", "&quot;", "&apos;"), 
    $field
);
$data="<doc><field name=\"myname\">".$fieldParsed."</field></doc>";
$cmd="echo '".$data."' >> /tmp/test.txt";
echo "\n\n".$cmd. "\n\n";
exec($cmd);