Conversion universelle de caractères

Contenu du snippet

Bonjour, c'est pour faire face à un dilemne que j'ai pondu cette source. En effet, certains utilisent l'UTF-8, d'autres l'ISO pour naviguer. Cela peut poser des problèmes d'encodage avec html_entities() dans les bases de données. Ca vous est surement déjà arrivé d'avoir des caractères bizarres à la sortie d'une requête, c'est ch... embêtant. Ma fonction permet de différencier l'UTF-8 de l'ISO-8859-* (ici 15 suffit) et ensuite d'encoder dans les caractères HTML spéciaux.

Petit plus : d'autres petites fonctions comme l'echappement des slashes et des \r\n sont intégrées.

Source / Exemple :


// VERSION SIMPLE

function ConvertEntities($string, $quotes = ENT_COMPAT, $slashesstriping = TRUE, $nl2brshape = TRUE)
{
	if ( $slashesstriping )
      $string = stripslashes($string);
	
	// Contrôle le charset réel (UTF-8 -> ISO-8859-15)
	$first = ( !preg_match('`é`i', mb_convert_encoding($string.'é', 'UTF-8', 'ISO-8859-15') ) ? 'UTF-8, ISO-8859-15' : 'ISO-8859-15, UTF-8');
	
	// Teste s'il y a besoin d'une transformation (Optimisation)
	if ( !mb_check_encoding($string,'ASCII') )
          $string = htmlentities($string, $quotes, mb_detect_encoding($string,$first) );
	else
	  $string = htmlentities($string,$quotes);
	
        // Sécurité pour l'echappement parfois " foireux " surtout pour le javascript
	$string = strtr($string, array('\'' => '’'));

	// Convertit les \r\n
	return ( $nl2brshape ) ? nl2br($string) : strtr($string,array(chr(10).chr(13) => ''));

}

Conclusion :


Par défaut, l'appel de la fonction sans argument (juste avec le texte) va convertir le texte tout en convertissant les retour à la ligne et en supprimant les slashes superflux.

Notes : l'ISO-8859-15 prend en charge (normalement) le 1~14 en plus.

Une sécurité est disponible pour un contournement de l'echappement du ' (surtout pour le javascript), n'hésitez pas à la retirer si vous avez des problèmes.

Si vous avez des bugs, prévenez-moi ! Cette fonction est utilisée sur le site http://www.multithematic.info/ (info-bulles des nouvelles du net par exemple ou encore le wall).

Je vais étudier une nouvelle version pour prendre en charge l'UTF-16, 32 et quelques autres encodages si la fonction tient le choc ;-)

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.