我有一个php脚本,它从我的数据库获取数据并使用exec命令创建XML(在Linux OS上)。
我知道这不是创建它的更好方法,我稍后会更新:)
无论如何,我的问题是它提供错误'错误替换'。
这是一个简单的PHP代码,可以显示错误... 您可以注意到,为了创建“有效的XML”(即:格式良好),我手动转义一些特殊的字符:
<?php
$field="\${sao{}}\$";
$fieldParsed.= str_replace(
array("&", "<", ">", '"', "'", "\\", "`"),
array("&", "<", ">", """, "'", "\\\\", "`"),
$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解释”? 即:简单地把它当成......
注意:此代码只是一个示例,因此转义$将不是有效的答案。我正在寻找一般解决方案(如果有的话)......
感谢。
答案 0 :(得分:0)
我认为解决方案是...... escapeshellcmd
但不是......因为这会插入,例如{而不是{
然而,问题似乎是带双引号的回声(&#34;)。 和php一样,echo用单引号保持字符串完整...(不像echo&#34; my $ var&#34;)
如果我使用带有单引号的回声(&#39;),它可以正常工作。
所以代码类似于:
<?php
$field="\${sao{}}\$";
$fieldParsed.=
str_replace(
array("&", "<", ">", '"', "'"),
array("&", "<", ">", """, "'"),
$field
);
$data="<doc><field name=\"myname\">".$fieldParsed."</field></doc>";
$cmd="echo '".$data."' >> /tmp/test.txt";
echo "\n\n".$cmd. "\n\n";
exec($cmd);