shell_exec()的输出包含被修饰的重音字符

时间:2012-01-30 12:33:21

标签: php shell encoding character-encoding

我有一个命令,我使用shell_exec()从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évisionvidé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

1 个答案:

答案 0 :(得分:2)

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

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

据推测,您可以将en_GB更改为您的语言。我注意到语言环境字符串似乎区分大小写。