bug escapeshellarg et accents ?

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : bug escapeshellarg et accents ?

par piopier » 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.

par mojorisin » 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.

par piopier » 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=

par mojorisin » 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) ?

par piopier » 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.

par Mathieu68 » 25 août 2008, 08:36

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

Tu devrais peut être encoder tes caractères!

par piopier » 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" ?

par piopier » 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... !

par piopier » 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é...

par Hywan » 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).

par piopier » 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 ?

par Hywan » 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 ?

par @rthur » 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?

par Hywan » 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é) ?

bug escapeshellarg et accents ?

par piopier » 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...