begin process at 2012 02 04 23:10:30
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Chaîne de caratère

 > CONVERSION UNIVERSELLE DE CARACTÈRES

CONVERSION UNIVERSELLE DE CARACTÈRES


 Information sur la source

Note :
Aucune note
Catégorie :Chaîne de caratère Classé sous :iso8859, utf8, htmlentities Niveau :Initié Date de création :13/04/2007 Date de mise à jour :21/06/2007 00:08:09 Vu :22 138

Auteur : Kdecherf

Ecrire un message privé
Site perso
Ce membre participe au partage de revenus publicitaires
Commentaire sur cette source (5)
Ajouter un commentaire et/ou une note


 Description

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

  • // 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) => ''));
  • }
// 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 ;-)


 Historique

21 juin 2007 00:08:09 :
Merci FhX pour ton optimisation, et aussi à noter la correction d'un problème de conversion si le code est en ASCII. Et ajout également d'un nouvel echappement pour les '.

 Sources de la même categorie

ADRESSE ABSOLUE DE LA PAGE EN COURS, AVEC VARIABLES $_GET par Dariumis
Source avec Zip CLASSE D'OBJET DE RECHERCHE DE MOTS DANS DES TABLEAUX ET/OU ... par 8Tnerolf8
RÉCUPÉRER LES MINIATURES D'UNE VIDÉO YOUTUBE par tefa24600
Source avec Zip Source avec une capture CONVERTISSEUR DE NOMBRES EN TEXTE par macruz
Source avec Zip Source avec une capture CODAGE TEXTE >HTML, ISO, SPECIALCHARS, URL ET DECODAGE par Salva9473

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture CODAGE TEXTE >HTML, ISO, SPECIALCHARS, URL ET DECODAGE par Salva9473
FONCTION _SCANDIR UTF8 par LDDL
UNICODE TO HTML ENTITIES par CrazyShooter
Source avec Zip PHP5 CLASSE GÉNÉRIQUE GESTION ROUTINES MYSQL par oxxo
Source avec Zip CONVERTIR UNE CHAINE UTF8 CONTENANT DES CARACTÈRES FRANÇAIS ... par domxml

Commentaires et avis

Commentaire de FhX le 16/04/2007 13:34:59

<?php
// Version optimisée
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) );
// Convertit les \r\n
return ( $nl2brshape ) ? nl2br($string) : strtr($string,chr(10).chr(13),'');

}
?>

Commentaire de Kdecherf le 16/04/2007 19:44:01

Merci pour l'optimisation :-P
Je la teste et je modifie la source ;-)

Et sinon, qu'est-ce que tu penses de la source ?

Commentaire de djrobz le 18/04/2007 13:42:35

Bonne idée !

Il m'est déjà arrivé ce genre de problème d'encodage lors d'un projet où il y a avait une base de données existante [destinée à un intranet] mais dont les données étaient encodées en UTF-16.

Le site et la nouvelle base résultante que je devais créer avaient pour contrainte technique d'être en UTF-8.

D'où les problèmes d'encodage que j'ai pu rencontrer!

Je pense que tu peux aller plus loin dans ta "Conversion universelle" des caractères, en modifiant ta fonction pour qu'elle soit compatible avec plus d'encodage  au départ( voire tous! Pourquoi pas?), et pas uniquement les encodages de type ISO-8859-*

En ce moment, je n'ai pas trop le temps de me pencher sur la question mais peut-être la semaine prochaine je verais si il y a un moyen simple en partant ta source.

Commentaire de verdy_p le 22/05/2008 22:57:07

Attention, PHP va maintenant être en UTF-8 par défaut et ce ne sera plus configurable par une option. Le support des jeux 8 bits sur un octet est maintenant obsolète (le "Rubicon" est franchi), et ils ne seront plus supprotés que par des librairies optionnelles d'extensions non installées par défaut.
Il est grand temps de passer tous vos projets PHP à l'Unicode et oublier le pseudo jeu "ANSI" de Windows non portable (en fait une parmi plusieurs pages de code dont Windows-1252 uniquement en Europe occidentale et Amérique), et même l'ISO 8859-1 (insuffisant même pour le français)!
PHP ne fait que reprendre (enfin! c'était réclamé depuis près de 10 ans!) ce que font tous les autres moteurs de scripts pour client ou serveur (JSP, J#, C#, Javascript...) et toutes les normes et RFC actuelles.

Commentaire de Kdecherf le 24/06/2008 00:07:45

Certes (PHP6) mais le passage ne sera pas pour demain ... ni après-demain.

De plus, je déconseille d'encoder les fichiers en UTF-8 BOM (UTF-8 avec signature) sinon vous allez avoir une belle surprise ;-)

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

Détecter encodage et conversion vers UTF8 [ par bruno9292 ] Bonjour,pour faire simple, j'ai une chaine, dont je ne connais pas l'encodage (ça peut etre UTF8, ISO8859-1, ISO8859-15, etc...) et j'aimerais la conv souci sur script d'espace membre et mail de confirmation [ par scorpion1122 ] Bonjour Voilà j'ai un souci sur un script dans lequel il y a un mail qui doit etre envoyer a la personne qui s'inscrit !Le probleme c'est que le mail Problème d'necodage UTF8 :-( je deviens fou ! [ par alphacrash ] Salut à tous !Voilà mon soucis, j'ai ce type de données dans ma base:dâ¤TÅ"ilQui correspond à "d'oeil", je n'arrive donc pas à décoder, j'ai tenté:ech Comportement bizar des accentuations [ par slhuilli ] BonjourJ'ai une chaine de caractère que je récupére de flux RSS (dont j'ignore l'encodage) qui, après être passée dans cette moulinette : $titre=utf8_ Encodage [ par coockiesch ] Bonjour à tous!   J'ai une petite question: je génère un document xml en php...Les actions que je fais sont:* utf8_encode* remplacer &amp;, &lt;, &gt; htmlspecialchars / htmlentities double encode [ par kohntark ] Salut à tous,Plutôt que de m'arracher les cheveux un peu plus je fais appel à vos lumières :Pourquoi ça :$str = '&lt;div&gt;machin&lt;/div&gt;';echo h recharger la meme page en affichant un message [ par cyrilherve ] salut a tous , voici le code de ma page 'corps_expedition', [CODE]&lt;script src="champsdyna1.js"&gt;&lt;/script&gt;&lt;style type="text/css"&gt;&lt;! Formulaire : Générer une présentation à l'aide d'une page php répondant au html [ par laglobulle ] Bonjour,J'ai créer une page html demandant des informations pour ensuite généré la prévisualisation de la présentation et obtenir le bbcode. Cette pag Verifier l'encodage de la requete d'un WebService [ par japette ] Bonjour,Je bute depuis pas mal de temps sur un problème qui m'est assez difficile de résoudre. C'est pour cela que j'ai besoin de vous!J'écris un webs utilisation de la fonction = utf8_encode( ) [ par vickos ] Bonjour a tous,j'ai écrit un code qui permet de lire chaque ligne d'un fichier ou se trouve des caractères ISO.Le but de ce code est de convertir les


Nos sponsors


Sondage...

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,530 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales