Forum Programmation.php PHP et UTF-8

Posté par  (site web personnel) .
Étiquettes : aucune
0
8
fév.
2009
Bonjour,

Je travaille actuellement sur deux sites en UTF-8.

Le premier, pas de problème. Le second: une section est problématique au niveau de l'encodage.

J'y fais des manipulation sur des chaînes de caractères. Je constate que les caractères accentués passent mal avec strlen et strtolower, m'obligeant à recourir à mb_strlen et mb_strtolower. Pire, un accès au premier caractère d'une chaîne par $chaine[0] me retourne un caractère erroné, m'obligeant à utiliser mb_substr...

Pouvez-vous me dire si je m'y prends mal (par exemple: un paramètre de configuration PHP qui m'aurait échappé) ou si cette manière de procéder est normale?

D'avance, je vous remercie.
  • # L'utilsation de mb_ est logique

    Posté par  . Évalué à 2.

    J'utilise utf8 également pour mes sites.

    Dans la doc de php, php<6 considère que pour une chaine 1 caractère = 1 octet. ( voir http://fr.php.net/manual/fr/language.types.string.php )

    J'ai eu recours a deux attitudes :
    * tout forcer en ISO 8859-1 avec utf8_decode() ce qui n'est pas spécialement fin.
    * forcer tout le monde : php (option de compilation), xhtml (en tete, mimetype), mysql (déclaration) et le navigateur (re mimetype, meta-equiv) en utf8 et utiliser les mb_* . Ce qui n'est pas non plus très fin.

    Par mon expérience je dirais que les mb_ est une manière logique, voire normale.
  • # Surcharge des fonctions de chaines

    Posté par  (site web personnel) . Évalué à 2.

    Bonjour,

    tant que l'on sera en php < 6, il y aura des problèmes avec l'UTF-8 car les fonctions de manipulation de chaine de php ne se pré-occupe pas de l'encode des chaines que l'on lui passe. Il est donc normal de devoir passer par les fonctions mb_* ou les utf8_encode ou utf8_decode.

    Mais il existe un paramètre de configuration dans le php.ini qui permet l'utilisation de toutes les fonctions de chaine de caractères en passant par les fonctions mb_*

    En mettant mbstring.func_overload=7, toutes les fonctions de chaines tel que strlen, ereg sont surchargées par leur equivalent mb_* (strlen = mb_strlen, ereg = mb_ereg, ...)

    Mais certaines applications web supporte mal ce paramètre, comme par exemple, phpMyAdmin qui indique alors qu'il y a des risques lors de la modification de données via son interface.

  • # Merci

    Posté par  (site web personnel) . Évalué à 1.

    Ok, merci pour vos commentaires, ça me rassure un peu sur l'allure de mon code, alors ;-).

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.