20 votes

Veuillez traduire ceci en gardant les mêmes balises HTML s'il en existe de en à fr : PHP exec change encoding

Je dois traiter les noms de fichiers UTF-8 avec la commande php exec. Le problème est que la commande php exec ne semble pas comprendre l'utf-8. J'utilise quelque chose comme ceci:

echo exec('locale charmap');

retourne ANSI_X3.4-1968

en regardant cette question SO, la solution ressemble à ceci:

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

Mais j'obtiens toujours la même sortie: ANSI_X3.4-1968

Par contre - si j'exécute cette commande php sur la ligne de commande bash:

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

La sortie est UTF-8. Alors les questions sont:

  1. Pourquoi y a-t-il un résultat différent en exécutant la commande php en bash et sur une page web avec apache_module?
  2. Comment définir UTF-8 pour exec s'il s'exécute à l'intérieur d'un site web en tant que module apache?

42voto

The Bndr Points 3442

Pour répondre à ma propre question - j'ai trouvé la solution suivante:

définition de la variable d'environnement locale avec PHP

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

Cela définit / renvoie UTF-8. Ainsi, je suis capable de passer des caractères spéciaux et des trémas aux commandes de shell linux.

5voto

Basj Points 776

Cela résout le problème pour moi (source: ce commentaire ici):

2voto

MrD Points 2293

J'ai eu le même problème. Mon programme me renvoyait des lettres allemandes comme : üäöß. Voici mon code :

$programResult = shell_exec('my script');

La variable $programResult contient des umlauts allemands, mais ils étaient mal encodés. Pour les encoder correctement, vous pouvez appeler la fonction utf8_encode().

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X