19

我需要使用 php exec 命令来处理 UTF-8 文件名。问题是 phpexec命令似乎不理解 utf-8。我使用这样的东西:

echo exec('locale charmap');

返回ANSI_X3.4-1968

看着这个SO question,解决方案看起来像这样:

echo exec('LANG=de_DE.utf8; locale charmap'); 

但我仍然得到相同的输出:ANSI_X3.4-1968

另一方面 - 如果我在 bash 命令行上执行这个 php 命令:

php -r "echo exec('LANG=de_DE.UTF8 locale charmap');"

输出为 UTF-8。所以问题是:

  1. 为什么在 bash 和 apache_module/web 页面上执行 php 命令会有不同的结果?
  2. exec如果它在网站内作为 apache 模块运行,如何设置 UTF-8 ?
4

3 回答 3

39

要回答我自己的问题 - 我找到了以下解决方案:

使用 PHP 设置语言环境变量

$locale='de_DE.UTF-8';
setlocale(LC_ALL,$locale);
putenv('LC_ALL='.$locale);
echo exec('locale charmap');

这设置为 / 返回 UTF-8。所以我能够将特殊字符和变音符号传递给 linux shell 命令。

于 2012-12-20T10:15:05.503 回答
5

这为我解决了这个问题(来源:这里的评论):

<?php
putenv('LANG=en_US.UTF-8'); 
$command = escapeshellcmd('python3 myscript.py');
$output = shell_exec($command);
echo $output;
?>
于 2019-10-13T22:28:56.513 回答
1

我有类似的问题。我的程序返回给我一些德语字母,例如:üäöß。这是我的代码:

$programResult = shell_exec('my script');

变量$programResult包含德语变音符号,但编码错误。为了正确编码,您可以调用utf8_encode()函数。

$programResult = shell_exec('my script');
$programResult = utf8_encode($programResult);
于 2016-02-11T13:08:35.240 回答