Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 包含重音字符的shell_exec()的输出被损坏_Php_Shell_Encoding_Character Encoding - Fatal编程技术网

Php 包含重音字符的shell_exec()的输出被损坏

Php 包含重音字符的shell_exec()的输出被损坏,php,shell,encoding,character-encoding,Php,Shell,Encoding,Character Encoding,我有一个从PHP运行的命令。 有时命令的输出将包含重音字符 从Bash运行时,输出将正确显示。但是,从shell_exec运行时,重音字符会丢失,输出会被截断 Bash的输出示例: . D 0 Tue Oct 25 16:45:26 2011 .. D 0 Tue Oct 25 16:45:26 2011 ... Backgro

我有一个从PHP运行的命令。 有时命令的输出将包含重音字符

从Bash运行时,输出将正确显示。但是,从
shell_exec
运行时,重音字符会丢失,输出会被截断

Bash
的输出示例:

.                                   D        0  Tue Oct 25 16:45:26 2011
..                                  D        0  Tue Oct 25 16:45:26 2011

...

Background pres for political speech maggie & gemma.ppt      A  3323392  Fri Oct 24   14:31:26 2008
extra listening exercise on la télévision.doc      A    24064  Wed Jan 11 08:12:32 2006
gender of nouns.ppt                 A    42496  Fri Sep 10 07:55:42 2004

...

            63999 blocks of size 8388608. 36710 blocks available
shell_exec
的输出示例-注意
télévision
vidéo
等发生了什么:

.                                   D        0  Tue Oct 25 16:45:26 2011
..                                  D        0  Tue Oct 25 16:45:26 2011

...

Background pres for political speech maggie & gemma.ppt      A  3323392  Fri Oct 24 14:31:26 2008
extra listening exercise on la t  gender of nouns.ppt                 A    42496  Fri Sep 10 07:55:42 2004

...

    63999 blocks of size 8388608. 36710 blocks available

我的解决方案是在shell_exec之前运行这些命令,以确保使用了正确的语言环境:

$locale = 'en_GB.utf-8';
setlocale(LC_ALL, $locale);
putenv('LC_ALL='.$locale);

大概您可以将en_GB更改为您的任何语言。我注意到区域设置字符串似乎区分大小写。

bash使用的编码不是
shell\u exec
。尝试找出正在使用的shell
shell_exec
,并比较两者之间的编码配置。把这两个都加到你的问题上。可能重复-尤其是。哈克雷,你是对的。我看到了这个答案,但没有发现它提出了两种不同的解决方案,我只尝试了第一种。尝试第二个解决了问题。谢谢。请在下面添加您的解决方案作为答案并接受它。像你这样的问题不多,所以我认为在这里解决它也是值得的。你可以稍后接受你的答案(是的,这是有效的)。这将有助于使这个网站工作。