19

php exec コマンドで UTF-8 ファイル名に対処する必要があります。問題は、phpexecコマンドが utf-8 を理解していないように見えることです。私は次のようなものを使用します:

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/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 シェル コマンドに渡すことができます。

于 2012-12-20T10:15:05.503 に答える
1

同様の問題がありました。私のプログラムは、üäöß のようなドイツ語の文字を返してきました。これが私のコードです:

$programResult = shell_exec('my script');

変数$programResultにはドイツ語のウムラウトが含まれていますが、正しくエンコードされていません。それを適切にエンコードするために、utf8_encode()関数を呼び出すことができます。

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