PHP, Windows et UTF8 - strtolower() 
samedi, 4 février 2006, 02:19 AM - Ajax, PHP, Windows
Supposons:

Votre script PHP doit communiquer en parallèle avec une application Flash via AJAX (donc en UTF8) et s'exécuter sur un système Windows. Plutôt que d'encoder toutes les chaînes en UTF8 que vous devez transmettre, vous décidez de configurer le serveur PHP et votre base de données en UTF8.

Dépendamment du système Windows, il est possible que vous ayez des difficultés avec les fonctions relatives à la case (minuscule / majuscule) dont strtolower :

"This function is sensible to the current locale, namely the LC_CTYPE category (the default LC_CTYPE category is set from the LANG environment variable or by an explicit LC_CTYPE setting, but it can be overriden by the LC_ALL environment setting). If no locale setting is done in the environment, the default locale will be C, for which the lowercase/uppercase conversion is based on the default character set of the system: this may convert only ASCII letters, or also ISO-8859-1 letters depending on the system..." (commentaire du 12-Sep-2002)

Conséquence:

<?php
  $ma_var 
'Ici ou là-bas';
  
$ma_var strtolower($ma_var);
  echo 
$ma_var;

  
// Résultat --> 'ici ou l'
  // La partie "à-bas" a été tronqué de la variable. 
?>


Si vous avez ce problème à résoudre, vous pouvez simplement décoder la chaîne, faire l'opération strtolower et ré-encoder la chaîne:

<?php
  
function utf8_strtolower($x) {
    return(
utf8_encode(strtolower(utf8_decode($x))));
  }

  
$ma_var 'Ici ou là-bas';
  
$ma_var utf8_strtolower($ma_var);
  echo 
$ma_var;

  
// Résultat --> 'ici ou là-bas'
?>


[ 2 commentaires ] ( ( 4276 vues ) )   |  [ 0 trackbacks ]   |  permalink