PHP exec改变编码

时间:2012-12-19 21:52:18

标签: php encoding utf-8 exec

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

echo exec('locale charmap');

返回ANSI_X3.4-1968

查看this问题,解决方案看起来像这样:

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?

3 个答案:

答案 0 :(得分:30)

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

使用PHP

设置语言环境变量
$locale='de_DE.UTF-8';
setlocale(LC_ALL,$locale);
putenv('LC_ALL='.$locale);
echo exec('locale charmap');

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

答案 1 :(得分:3)

这为我解决了问题(来源:this comment here):

<?php
putenv('LANG=en_US.UTF-8'); 
$command = escapeshellcmd('python3 myscript.py');
$output = shell_exec($command);
echo $output;
?>

答案 2 :(得分:1)

我遇到了类似的问题。我的节目给了我一些德语字母:üäöß。这是我的代码:

$programResult = shell_exec('my script');

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

$programResult = shell_exec('my script');
$programResult = utf8_encode($programResult);