2012-01-30 25 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更改爲任何語言即可。我注意到區域設置字符串似乎區分大小寫。

相關問題