17 07 | 2017

Gestion de l'UTF-8 dans les applications PHP en environnement IBM i

Rédigé par DUMAS Gautier

Classé dans : PHP sur IBM i, Zend

Nos bases de données DB2 pour IBM i contiennent de plus en plus d'informations provenant de divers horizons (logiciels tiers, multi-pays) pouvant contenir des caractères souvent mal gérés dans les applications (pensez aux caractères mandarins, cyrilliques ou plus couramment aux caractères accentués).

Le passage à l'encodage UTF-8 dans nos applications devient donc une nécessité pour pouvoir gérer (stocker, traiter, afficher...) nos données contenant ces caractères complexes, codés sur plusieurs bytes.

Pour éviter les fameux "losanges noirs avec le point d'interrogation" ou autres caractères déplaisants à l'affichage, il est nécessaire de configurer son environnement Zend en conséquence, ainsi que de respecter certaines bonnes pratiques dans l'utilisation de l'encodage UTF-8.

En environnement IBM i, l'UTF-8 doit être configuré à tous les niveaux pour un fonctionnement optimal. Les différents niveaux les plus fréquemment utilisés dans les applications PHP sur IBM i sont les suivants :

  • Le module fastcgi

A partir du Zend Server 8, le module fastcgi est configuré par défaut pour fonctionner avec l'UTF-8 (CCSID 1208). Ce paramètre est accessible et est modifiable depuis la console 5250 de votre Zend Server ou directement dans le fichier de configuration (/www/myZendServer/conf/fastcgi.conf où myZendServer dépend de la version du Zend Server installée : zendsvr, zendsvr6 ou zendphp7)

  • La connexion DB2

Il est nécessaire de configurer l'extension ibm_db2 à l'aide des directives suivantes : 

ibm_db2.i5_dbcs_alloc avec la valeur 1
Plus d'informations sur ce paramètre dans la base de connaissance Zend. La configuration de ce paramètre avec la valeur 1 rend les traitements un peu moins performants mais cette configuration est nécessaire pour la gestion de l'UTF-8. Sinon, il arrive qu'un caractère aléatoire se glisse dans les valeurs retournées par nos requêtes SQL. Attention, la valeur 1 n'est pas la valeur par défaut.

ibm_db2.i5_override_ccsid avec la valeur 0 [force PASE CCSID (utf-8 1208)] qui force l'usage de l'UTF-8 avec les connexions DB2. Cette valeur n'est pas forcément la valeur par défaut selon votre Zend Server.

  • Les scripts (PHP, js, css)

Les scripts utilisés dans nos applications doivent être dans l'encodage UTF-8. Pour consulter l'encodage de vos scripts, l'astuce est d'utiliser notepad++ et ses options de menu "encodage". Il vous indiquera comment sont codés vos scripts. Si vos scripts ne sont pas UTF-8, notepad++ dispose d'une option de conversion vers UTF-8 très pratique.

  • Le document HTML (interprété par le navigateur)

La dernière étape est d'indiquer au navigateur que le document HTML que nous lui envoyons est également encodé en UTF-8. Cela aidera au bon affichage dans le navigateur des caractères UTF-8 (codés sur plusieurs bytes). Pour cela, vous pouvez utiliser la balise HTML 5 suivante à positionner dans l'entête de votre document HTML :

<meta charset="UTF-8">

 

Cette liste n'est pas exhaustive et dépend de vos applications existantes ainsi que de l'utilisation de celles-ci.
NoToS peut vous assister dans la migration de vos applications existantes vers un environnement full UTF-8 (de l'analyse à la réalisation de vos projets en passant par le transfert de compétences). N'hésitez pas à nous contacter pour plus d'informations.

Les commentaires sont fermés.

Qui sommes-nous ?

  • Notos, expert IBMi (AS/400) et spécialiste de l’informatisation des PME/PMI est le partenaire privilégié des entreprises qui veulent moderniser leur Informatique.
  • En savoir plus

Catégories

Archives

Derniers commentaires