PHP 执行更改编码

2022-08-30 20:31:40

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

echo exec('locale charmap');

返回ANSI_X3.4-1968

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

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/网页上执行 php 命令会有不同的结果?
  2. 如何设置UTF-8,如果它作为apache模块在网站内部运行?exec

答案 1

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

使用 PHP 设置区域设置环境变量

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

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


答案 2

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

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

推荐