bug escapeshellarg et accents ?

Petit nouveau ! | 8 Messages

16 août 2008, 23:30

Bonjour,

J'utilise PHP5.2 sous Linux Ubuntu (PHP 5.2.4-2ubuntu5.3).

Mon problème est que la fonction escapeshellarg supprime tous les caractères accentués ! Ce qui pose problème pour l'application de mon site.
Est-ce un comportement normal ??? Ya-t-il un paramètre de configuration permettant d'éviter cela ?

Il y a quelques mois pourtant, avec une précédente version de PHP, escapeshellarg n'avait pas ce comportement, mes accents étaient conservés...

ViPHP
ViPHP | 4674 Messages

17 août 2008, 00:01

Hey :),

Tout d'abord : bienvenu sur PHPFrance.

Pour connaître le profil de cette fonction, rien ne vaut un tour dans le manuel : escapeshellarg(). Je ne vois rien de mentionné, et une recherche rapide accompagnée d'une lecture en diagonale des commentaires ne m'a rien donné.
Peut-on voir le code (par curiosité) ?
« Un handicap est le résultat d'une rencontre entre une déficience ou différence et une incapacité de la société à répondre à celle-ci. »

Hoa : http://hoa-project.net (sur @hoaproject).

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

17 août 2008, 12:01

Bonjour,

La suppression des accents par escapeshellarg me semble également peu probable...
As-tu vérifié que tu n'ai pas de problème de charset?
Quand tout le reste a échoué, lisez le mode d'emploi...

ViPHP
ViPHP | 4674 Messages

17 août 2008, 16:16

J'y pense là : il est possible que le terminal ne supporte pas les entrées genre unicode. Mais à quel moment vois-tu que les accents sont supprimés : avant de l'envoyer dans le terminal ou une fois dans le terminal ?
« Un handicap est le résultat d'une rencontre entre une déficience ou différence et une incapacité de la société à répondre à celle-ci. »

Hoa : http://hoa-project.net (sur @hoaproject).

Petit nouveau ! | 8 Messages

19 août 2008, 15:39

J'avais bien regardé la doc d'escapeshellarg et ses commentaires sans rien trouver non plus.
Pour un pb de charset, j'en sais rien, mais comment vérifier/modifier ça ?

Le code incriminé fait partie de MediaWiki.
Après avoir trouvé que le pb provenait de l'utilisation de escapeshellarg, j'ai écrit une petite page toute simple pour vérifier :

Code : Tout sélectionner

<html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /></head> <body> abé 1 <br> <?php echo "abé<br>"; echo escapeshellarg("abé"); ?> </body></html>
Ce qui me retourne :

Code : Tout sélectionner

<html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /></head> <body> abé 1 <br> abé<br>'ab' </body></html>
Etrange non ?

ViPHP
ViPHP | 4674 Messages

19 août 2008, 22:45

J'ai testé ça :

Code : Tout sélectionner

$ php -a Interactive mode enabled <?php var_dump(escapeshellarg("abé")); string(6) "'abé'"
Quelle version de PHP as-tu déjà ? Ensuite, sur quelle plate-forme PHP est-il installé ? Est-ce que les configurations de localisation de PHP sont-elles bien toutes en place ?

Je doute que ce soit un problème de charset. J'ai testé ça dans mon terminal … … mais il est en unicode (utf-8). Je teste autre chose … non bah pareil. Je ne mettrais pas le charset en cause pour ma part (mais je peux me tromper).
« Un handicap est le résultat d'une rencontre entre une déficience ou différence et une incapacité de la société à répondre à celle-ci. »

Hoa : http://hoa-project.net (sur @hoaproject).

Petit nouveau ! | 8 Messages

20 août 2008, 01:08

Comme je disais j'ai PHP 5.2.4-2ubuntu5.3, sur Ubuntu donc.
Pour les configurations de localisation de PHP, je ne sais pas de quoi il s'agit, peux-tu m'éclairer ?

Je viens de faire ton test (php interactif), je ne peux alors même pas taper de caractère accentué...

Petit nouveau ! | 8 Messages

21 août 2008, 21:31

Et un autre indice : les fonctions comme substr() considèrent les caractères accentués comme s'il s'agissait de deux caractères... !

Petit nouveau ! | 8 Messages

24 août 2008, 23:07

Personne n'a une idée ?
Quelqu'un (HyWaN ?) pourrait m'expliquer ce que tu voulais dire par "les configurations de localisation de PHP" ?

Eléphant du PHP | 148 Messages

25 août 2008, 08:36

http://www.commentcamarche.net/html/htmlcarac.php3

Tu devrais peut être encoder tes caractères!

Petit nouveau ! | 8 Messages

26 août 2008, 09:10

Ma question portait sur escapeshellarg, donc pour utiliser une chaine comme argument d'une commande pour le shell système, pas (pas tout de suite) pour un affichage sur page web.

Eléphant du PHP | 217 Messages

27 août 2008, 07:51

Comme je disais j'ai PHP 5.2.4-2ubuntu5.3, sur Ubuntu donc.
Pour les configurations de localisation de PHP, je ne sais pas de quoi il s'agit, peux-tu m'éclairer ?

Je viens de faire ton test (php interactif), je ne peux alors même pas taper de caractère accentué...
Salut,
alors je pense que c'est un problème de locale.
que renvoie la commande locale (dans une console) ?

Petit nouveau ! | 8 Messages

28 août 2008, 09:56

Merci pour ta réponse. La commande locale renvoit:

Code : Tout sélectionner

LANG=fr_FR.UTF-8 LC_CTYPE="fr_FR.UTF-8" LC_NUMERIC="fr_FR.UTF-8" LC_TIME="fr_FR.UTF-8" LC_COLLATE="fr_FR.UTF-8" LC_MONETARY="fr_FR.UTF-8" LC_MESSAGES="fr_FR.UTF-8" LC_PAPER="fr_FR.UTF-8" LC_NAME="fr_FR.UTF-8" LC_ADDRESS="fr_FR.UTF-8" LC_TELEPHONE="fr_FR.UTF-8" LC_MEASUREMENT="fr_FR.UTF-8" LC_IDENTIFICATION="fr_FR.UTF-8" LC_ALL=

Eléphant du PHP | 217 Messages

28 août 2008, 12:46

Les locales sont bien en français, je suppose que dans une console tu n'as pas de proplème avec les accents.
Il serait bon de voir alors plusieurs point :
que donne echo escapeshellarg(utf8_encode('abé'));
La directive default_charset de ton php.ini est-elle renseignée ? /etc/php5/apache2/php.ini et /etc/php5/cli/php.ini par défaut sur une Debian)
Dans quel encodage enregistres-tu tes pages ?

Bref beaucoup de petites choses à vérifier.

Petit nouveau ! | 8 Messages

29 août 2008, 23:31

-Dans une console habituellement (en dehors du mode interactif de PHP), je n'ai pas de problème d'accent.
- echo escapeshellarg(utf8_encode('abé')); : cela renvoit aussi : 'ab'
- dans php.ini, la directive default_charset était commenté. Je l'ai décommentée et mis à "UTF-8" et redémarré apache : le problème est identique. Mais si je comprends bien cette directive n'est que pour l'envoi des pages html, non ? Or mon problème est en amont : dans mon code, je définis une chaîne avec accent et la donne à escapeshellarg(), pour ensuite l'utiliser avec une commande shell, en l'occurence ImageMagick. Avant même de lancer la commande, les accents sont supprimés, ce qui cause problème.
- mes pages sont toutes enregistrées en utf8.