【问题标题】:Output from shell_exec() containing accented charcters getting mangled包含重音字符的 shell_exec() 的输出被破坏
【发布时间】:2012-01-30 12:33:20
【问题描述】:

我有一个使用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

【问题讨论】:

  • bash 使用了除shell_exec 之外的其他编码。尝试找出 shell_exec 正在使用哪个 shell,并比较两者之间的编码配置。将两者都添加到您的问题中。
  • Unicode to PHP exec 的可能重复项 - 尤其是 this answer
  • hakre,你是对的。我看过那个答案,但没有发现它提出了两种不同的解决方案,我只尝试了第一种。尝试第二个解决了这个问题。谢谢。
  • 请在下面添加您的解决方案作为答案并接受它。像你这样的问题并不多,所以我认为在这里解决它也是值得的。您可以稍后接受您的答案(是的,这有效)。这将有助于使该网站正常运行。

标签: php shell encoding character-encoding


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 2013-06-07
    • 2018-09-10
    • 1970-01-01
    • 2012-06-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-24
    • 2017-09-03
    • 2014-11-27
    相关资源
    最近更新 更多