2012-01-30 74 views
2

我有一个命令,我使用的是从PHP运行的使用shell_exec()。 有时该命令的输出将包含重音字符。从包含重音字符的shell_exec()输出变得不稳定

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

Bash输出示例:shell_exec输出

.         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 

实例 - 注意发生了什么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

* bash *正在使用比'shell_exec'更多的编码。尝试找出哪个shell'shell_exec'正在使用并比较两者之间的编码配置。添加到您的问题。 – hakre 2012-01-30 13:04:33

+2

[Unicode to PHP exec]可能的重复(http://stackoverflow.com/questions/6065557/unicode-to-php-exec) - 特别是[这个答案](http://stackoverflow.com/a/6066720/ 367456)。 – hakre 2012-01-30 13:08:17

+0

好,你是对的。我看到了答案,但没有发现它提出了两种不同的解决方案,我只试过第一种。尝试第二个解决了这个问题。谢谢。 – marxjohnson 2012-01-30 13:25:54

回答

2

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

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

想必只要将en_GB更改为任何语言即可。我注意到区域设置字符串似乎区分大小写。