PHP exec改变编码

The*_*ndr 17 php encoding exec utf-8

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

echo exec('locale charmap');
Run Code Online (Sandbox Code Playgroud)

回报 ANSI_X3.4-1968

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

echo exec('LANG=de_DE.utf8; locale charmap'); 
Run Code Online (Sandbox Code Playgroud)

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

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

php -r "echo exec('LANG=de_DE.UTF8 locale charmap');"
Run Code Online (Sandbox Code Playgroud)

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

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

The*_*ndr 32

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

使用PHP设置语言环境变量

$locale='de_DE.UTF-8';
setlocale(LC_ALL,$locale);
putenv('LC_ALL='.$locale);
echo exec('locale charmap');
Run Code Online (Sandbox Code Playgroud)

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

  • 发现这一点使我现在成为一个快乐的人。谢谢你的问答 (2认同)

Bas*_*asj 5

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

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