Php 字符串未正确地通过shell_exec传递到bash脚本

Php 字符串未正确地通过shell_exec传递到bash脚本,php,linux,bash,shell,Php,Linux,Bash,Shell,在第1页中输入文本: ... <form name="myform" action="page2.php" method="post"> <input type="text" size="92" name="my_text" /> ... 到目前为止,我们还不错,echo$our_text仍然为我提供了正确的字符串。 但是,当将$subject传递给bash脚本时: ... shell_exec("./myscript.sh '$our_text'"); 在myscr

在第1页中输入文本:

...
<form name="myform" action="page2.php" method="post">
<input type="text" size="92" name="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
没有创建 “Le'Léphant va bien”(意思是大象感觉很好…),实际上在log.txt中放上了“LéLéphant”,如果我们通过shell exec传递额外的参数,其他单词将在其他参数中传递 例如,如果我将4个参数传递给shell exec:

1: "L'éléphant va bien"
2: "go"
3: 4
4: "stop"
然后在
scrip.sh
中,如果我在
log.txt
中将
$1
回送到
$4
,我有:

1: Léléphant
2: va
3: bien
4: 
但有时它就是不起作用,没有任何东西被写入
log.txt

你知道如何解决这个问题并正确地通过shell_exec传递字符串,以便我在bash脚本中恢复完整的字符串吗? 提前谢谢

你试过了吗?

应该可以。以以下为例:

ourtext.php (进行了一些更改以使其更加健壮)

然后在命令行中按如下方式运行:

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

不,同样的行为。在给shell_exec打电话之前,我添加了“$our_text=escapeshellarg($our_text);”,但没有帮助。谢谢Michael。我试图将其合并到我的文件(html表单=>php=>script)中,但有一点不同,现在它确实使用撇号进入log.txt,但是“é”被删除了!当使用escapeshellarg时,这会在php文件中发生。在php中,如果我在escapeshellarg前后回显$out_文本,我会先回显L'Léphant va bien,然后回显L'lphant va bien@Alex您是否尝试过显式设置区域设置?我更新了示例。是的,LC_LCTYPE是问题所在,dos2unix命令也解决了返回线问题。谢谢
<?php
setlocale(LC_CTYPE, 'en_US.UTF-8');
$our_text = "L'éléphant va bien";
shell_exec('./myscript.sh ' . escapeshellarg($our_text));
still_our_text=$1
printf '%s\n' "$still_our_text" >log.txt
$ php ourtext.php; cat log.txt
L'éléphant va bien