在第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
中回复$4
到log.txt
,我就有:
1: Léléphant
2: va
3: bien
4:
但有时它只是不起作用而且没有任何内容写在log.txt
。
有关如何修复此问题并通过shell_exec正确传递字符串的任何想法,所以我在bash脚本中恢复了我的完整字符串? 提前致谢
答案 0 :(得分:0)
您是否尝试过escapeshellarg?
答案 1 :(得分:0)
escapeshellarg应该有效。请看以下示例:
<?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