字符串未通过shell_exec正确传递给bash脚本

时间:2014-01-28 14:48:37

标签: php linux bash shell

在第1页输入文字:

...
<form name="myform" action="page2.php" method="post">
<input type="text" size="92" name="my_text" />
...

使page2.php:

...
$our_text = ($_POST['my_text']);

到现在为止我们还可以,echo $our_text仍然给我正确的字符串。 但是,当将$subject传递给bash脚本时:

...
shell_exec("./myscript.sh '$our_text'");

在myscript.sh中:

...
still_our_text=$1
echo $still_our_text > log.txt

log.txt中,如果只有标准字母和空格,我就有完整的字符串。但如果有撇号 或带有重音的字母(法语é或è或ê),那么我只会得到奇怪的东西 “我现在就会这样做”在log.txt中保持不变 “我现在就做”只是不起作用,log.txt没有创建 “L'éléphantvabien”(这意味着大象感觉很好......),实际上在“log.txt”中放入“Lélléphant”,如果我们通过shell exec传递其他参数,则其他单词将在其他论点 例如,如果我将4个参数传递给shell exec:

1: "L'éléphant va bien"
2: "go"
3: 4
4: "stop"

然后在scrip.sh,如果我在$1中回复$4log.txt,我就有:

1: Léléphant
2: va
3: bien
4: 

但有时它只是不起作用而且没有任何内容写在log.txt

有关如何修复此问题并通过shell_exec正确传递字符串的任何想法,所以我在bash脚本中恢复了我的完整字符串? 提前致谢

2 个答案:

答案 0 :(得分:0)

您是否尝试过escapeshellarg

答案 1 :(得分:0)

escapeshellarg应该有效。请看以下示例:

ourtext.php

<?php
setlocale(LC_CTYPE, 'en_US.UTF-8');
$our_text = "L'éléphant va bien";
shell_exec('./myscript.sh ' . escapeshellarg($our_text));

myscript.sh

still_our_text=$1
printf '%s\n' "$still_our_text" >log.txt

(做了一些改动,使其更加健壮)

然后从命令行运行它:

$ php ourtext.php; cat log.txt
L'éléphant va bien