Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

CONVERTIR UNE CHAINE UTF8 CONTENANT DES CARACTÈRES FRANÇAIS EN ISO-8859-1


Information sur la source

Catégorie :Chaîne de caratère Classé sous : utf8, iso88591, utf8decode Niveau : Débutant Date de création : 27/12/2006 Vu / téléchargé: 29 468 / 469

Note :
8,6 / 10 - par 5 personnes
8,60 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (15)
Ajouter un commentaire et/ou une note

Description

mon besoin de developper ce code c'est comment
convertir un string UTF-8 contenant des caractère français exemple(communauté) en iso-8859-1 exemple (communauté)
 

Source

  • $str = "communauté et espérons";
  • $str_result = convertUTF8_to_8859($str);
  • echo $str_result; // affiche : communauté et espérons
  • function convertUTF8_to_8859($str){
  • // fonction qui test si la chaine est encodé en UTF8
  • if(is_utf8($str) == 1){
  • // fonction qui test si la chaine encodé en UTF8 contient des caractère français: Cette fonction ne traite que des chaines en UTF8
  • if(content8859_in_UTF8($str)=="TRUE"){
  • // On convertit la chaine de UTF8 en ISO8859-1
  • $str = utf8_decode($str);
  • // retourner la chaine converti
  • return($str);
  • }else{ // cas ou la chaine en UTF-8 mais ne contient pas des accents français (é,é,à,ù,û......) : exemple les caractères chinois encodé en UTF8
  • // retourner la chaine non convertit
  • return($str);
  • }
  • }else{ // cas ou la chaine n'est pas encodé en UTF8
  • return($str);
  • }
  • }
  • // Returns true if $string is valid UTF-8 and false otherwise.
  • function is_utf8($string) {
  • // From http://w3.org/International/questions/qa-forms-utf-8.html
  • return preg_match('%^(?:
  • [\x09\x0A\x0D\x20-\x7E] # ASCII
  • | [\xC2-\xDF][\x80-\xBF] # non-overlong 2-byte
  • | \xE0[\xA0-\xBF][\x80-\xBF] # excluding overlongs
  • | [\xE1-\xEC\xEE\xEF][\x80-\xBF]{2} # straight 3-byte
  • | \xED[\x80-\x9F][\x80-\xBF] # excluding surrogates
  • | \xF0[\x90-\xBF][\x80-\xBF]{2} # planes 1-3
  • | [\xF1-\xF3][\x80-\xBF]{3} # planes 4-15
  • | \xF4[\x80-\x8F][\x80-\xBF]{2} # plane 16
  • )*$%xs', $string);
  • } // function is_utf8
  • // fonction qui cherche s'il ya des caractres accentus franais dans une chaine en UTF8
  • function content8859_in_UTF8($str){
  • if ( strlen($str) == 0 ) { return; }
  • // cette fonction ne retourne de valeur si la chaine est en UTF8
  • // cette fonction retourne un tableau contenant les chaines accentuées
  • preg_match_all('/.{1}|[^\x00]{1,1}$/us', $str, $ar);
  • $chars = $ar[0];
  • $str_fr = 0;
  • foreach ( $chars as $i => $c ){
  • $ud = 0;
  • // Calcul les codes ASCII des chaines en UTF8
  • if (ord($c{0})>=0 && ord($c{0})<=127) { continue; } // ASCII - next please
  • if (ord($c{0})>=192 && ord($c{0})<=223) { $ord = (ord($c{0})-192)*64 + (ord($c{1})-128); }
  • if (ord($c{0})>=224 && ord($c{0})<=239) { $ord = (ord($c{0})-224)*4096 + (ord($c{1})-128)*64 + (ord($c{2})-128); }
  • if (ord($c{0})>=240 && ord($c{0})<=247) { $ord = (ord($c{0})-240)*262144 + (ord($c{1})-128)*4096 + (ord($c{2})-128)*64 + (ord($c{3})-128); }
  • if (ord($c{0})>=248 && ord($c{0})<=251) { $ord = (ord($c{0})-248)*16777216 + (ord($c{1})-128)*262144 + (ord($c{2})-128)*4096 + (ord($c{3})-128)*64 + (ord($c{4})-128); }
  • if (ord($c{0})>=252 && ord($c{0})<=253) { $ord = (ord($c{0})-252)*1073741824 + (ord($c{1})-128)*16777216 + (ord($c{2})-128)*262144 + (ord($c{3})-128)*4096 + (ord($c{4})-128)*64 + (ord($c{5})-128); }
  • if (ord($c{0})>=254 && ord($c{0})<=255) { $chars{$i} = $unknown; continue; } //error
  • //Test si les caractères contient les accents (à, é,è,ù,ç,ê,â,û,........)
  • if(($ord == 224) || ($ord == 226) || ($ord == 235) || ($ord == 249) || ($ord == 250) ||
  • ($ord == 252) || ($ord == 251) || ($ord == 233) || ($ord == 234) || ($ord == 232) ||
  • ($ord == 231) || ($ord == 228) || ($ord == 256) || ($ord == 128) || ($ord == 156) ||
  • ($ord == 230) || ($ord == 231) || ($ord == 244) || ($ord == 225) || ($ord == 236) ||
  • ($ord == 227) || ($ord == 237) || ($ord == 238) || ($ord == 249) || ($ord == 239) ||
  • ($ord == 257)){
  • $str_fr =1;
  • }
  • }
  • if($str_fr == 1){
  • return "TRUE";
  • }else{
  • return "FALSE";
  • }
  • }
$str = "communauté et espérons";
$str_result = convertUTF8_to_8859($str);
echo $str_result; // affiche :  communauté et espérons
function convertUTF8_to_8859($str){	
	// fonction qui test si la chaine est encodé en UTF8
	if(is_utf8($str) == 1){  
		// fonction qui test si la chaine encodé en UTF8 contient des caractère français: Cette fonction ne traite que des chaines en UTF8
		if(content8859_in_UTF8($str)=="TRUE"){
			// On convertit la chaine de UTF8 en ISO8859-1
			$str = utf8_decode($str);
			// retourner la chaine converti 
			return($str);
		}else{ // cas ou la chaine en UTF-8 mais ne contient pas des accents français (é,é,à,ù,û......) : exemple les caractères chinois encodé en UTF8
			// retourner la chaine non convertit
			return($str);
		}
	}else{ // cas ou la chaine n'est pas encodé en UTF8
		return($str);
	}
}
// Returns true if $string is valid UTF-8 and false otherwise. 
function is_utf8($string) { 

	// From http://w3.org/International/questions/qa-forms-utf-8.html 
	return preg_match('%^(?: 
		[\x09\x0A\x0D\x20-\x7E]            # ASCII 
		| [\xC2-\xDF][\x80-\xBF]            # non-overlong 2-byte 
		|  \xE0[\xA0-\xBF][\x80-\xBF]        # excluding overlongs 
		| [\xE1-\xEC\xEE\xEF][\x80-\xBF]{2}  # straight 3-byte 
		|  \xED[\x80-\x9F][\x80-\xBF]        # excluding surrogates 
		|  \xF0[\x90-\xBF][\x80-\xBF]{2}    # planes 1-3 
		| [\xF1-\xF3][\x80-\xBF]{3}          # planes 4-15 
		|  \xF4[\x80-\x8F][\x80-\xBF]{2}    # plane 16 
	)*$%xs', $string); 
} // function is_utf8 


// fonction qui cherche s'il ya des caractres accentus franais dans une chaine en UTF8
function content8859_in_UTF8($str){
	
	if ( strlen($str) == 0 ) { return; }  
	// cette fonction ne retourne de valeur si la chaine est en UTF8
	// cette fonction retourne un tableau contenant les chaines accentuées 
	preg_match_all('/.{1}|[^\x00]{1,1}$/us', $str, $ar);
	$chars = $ar[0];
	$str_fr = 0;
	foreach ( $chars as $i => $c ){
		$ud = 0;
		// Calcul les codes ASCII des chaines en UTF8
		if (ord($c{0})>=0   && ord($c{0})<=127) { continue; } // ASCII - next please
		if (ord($c{0})>=192 && ord($c{0})<=223) { $ord = (ord($c{0})-192)*64 + (ord($c{1})-128); }
		if (ord($c{0})>=224 && ord($c{0})<=239) { $ord = (ord($c{0})-224)*4096 + (ord($c{1})-128)*64 + (ord($c{2})-128); }
		if (ord($c{0})>=240 && ord($c{0})<=247) { $ord = (ord($c{0})-240)*262144 + (ord($c{1})-128)*4096 + (ord($c{2})-128)*64 + (ord($c{3})-128); }
		if (ord($c{0})>=248 && ord($c{0})<=251) { $ord = (ord($c{0})-248)*16777216 + (ord($c{1})-128)*262144 + (ord($c{2})-128)*4096 + (ord($c{3})-128)*64 + (ord($c{4})-128); }
		if (ord($c{0})>=252 && ord($c{0})<=253) { $ord = (ord($c{0})-252)*1073741824 + (ord($c{1})-128)*16777216 + (ord($c{2})-128)*262144 + (ord($c{3})-128)*4096 + (ord($c{4})-128)*64 + (ord($c{5})-128); }
		if (ord($c{0})>=254 && ord($c{0})<=255) { $chars{$i} = $unknown; continue; } //error
			//Test si les caractères contient les accents (à, é,è,ù,ç,ê,â,û,........)
			if(($ord == 224) || ($ord == 226) || ($ord == 235) || ($ord == 249) || ($ord == 250) ||
			    ($ord == 252) || ($ord == 251) || ($ord == 233) || ($ord == 234) || ($ord == 232) || 
			    ($ord == 231) || ($ord == 228) || ($ord == 256) || ($ord == 128) || ($ord == 156) ||
			    ($ord == 230) || ($ord == 231) || ($ord == 244) || ($ord == 225) || ($ord == 236) ||
			    ($ord == 227) || ($ord == 237) || ($ord == 238) || ($ord == 249) || ($ord == 239) ||
			    ($ord == 257)){
				$str_fr =1;
			} 
	}
	if($str_fr == 1){
		return "TRUE";
	}else{
		return "FALSE";
	}
}

Fichier Zip

Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip

Commentaires et avis

signaler à un administrateur
Commentaire de vilhjalms le 27/12/2006 15:48:08

utf8_decode("communauté et espérons"); => communauté et espérons

Voir aussi l'encodage d'apache, de la page etc ...

signaler à un administrateur
Commentaire de malalam le 28/12/2006 09:23:34 administrateur CS

Hello, j'ai un peu de mal aussi...peux-tu expliquer plus clairement l'intérêt de ton code ? Je passe les inexactitude de code : pourquoi retourner "TRU3 ou "FALSE" au lieu de vrais booléens...? Par exemple.

signaler à un administrateur
Commentaire de domxml le 28/12/2006 10:40:21

voilà je reponds à vos kestions
tout d'abord pour le valeur retourné par les fonctions de type string exemple "TRUE", c'est vrai ça étais etre retourné sous forme de boolien==> ça reste une amélioration.
Alors pour l'explication de besoin ce Code:
le besoin c'etais ya des pages dont les formats encodés en UTF-8. De plus dans les balises meta c'est pas indiqué le charset iso-8859-1. Donc si on met des String contentant des carcatères français accentués ses pages vont avoir automatiquement l'encodage UTF-8(vu que la format de la page c'est en UTF-8).
Alors pour convertir ses chaines là en iso-8859-1, il ya la fameuse fonction utf8-decode().Mais le pb k'elles sont les caratères à convertir surtout s'il ya plusieurs langues exemple sur les forum internationaux ya le japonais, russe, arabe... (c'est pour ça la page est en UTF-8 car elle englobe tous)
Et là j'ai proposé cette solution==> C'est convertir que les chaines qui contiennent des caractères Français sont elle retourne la chaine  comme elle l'est
L'algorithme:
si (chaine en UTF-8) alors
    si(la chaine contient des chaines accentué ) alors
       on convertit avec la fonction utf8-encode
    sinon
       on retrourne la chaine sans la modifié
    finsi
sinon
    on retrourne la chaine sans la modifié
finsi

==> Donc  on convert la chaine de  fonction UTF-8 en iso-8859-1 seulement dans le cas où une chaine UTF-8  contenant des caractères accentués français

Pour le première Commentaire posté l'encodage ça rien avoir avec le Apache ou autre c'est juste relié au format de la page et au charset utilisé

je crois que le code est bien commenté si vous voulez avoir plus de precision

Voilou
Merci

signaler à un administrateur
Commentaire de malalam le 28/12/2006 12:10:44 administrateur CS

Ca n'expolique pas pourquoi tu n'utilises pas directement utf8_decode () et utf8_encode () ... ? Quel apport ?

signaler à un administrateur
Commentaire de domxml le 28/12/2006 13:02:53

utf8_decode -- Convertit une chaîne UTF-8 en ISO-8859-1
utf8_encode -- Convertit une chaîne ISO-8859-1 en UTF-8

donc je dois bien verfier que la chaine à convertir contenant des caratères iso-8859-1

signaler à un administrateur
Commentaire de malalam le 28/12/2006 14:42:57 administrateur CS

Donc quoi ? Pourquoi dois-tu le vérifier ?

signaler à un administrateur
Commentaire de domxml le 28/12/2006 15:30:45

Salut MALAlAM :)

essaie de faire executer cette page et tu va voir pkoi je verifié tous ça et que j'aurais du utiliser simplement utf8_decode() ;)

<html>
<head>
<title>test de differance entre </title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<body>
<?
$str = "&#1042;&#1051;&#1040;&#1057;&#1058;&#1048; &#1056;&#1054;&#1057;&#1057;&#1048;&#1048;";
echo "affichage de la chaine russe sans décodage utf-8==> $str<br>";
$str = utf8_decode($str);
echo "affichage de la chaine russe avec décodage utf-8 ==>$str<br>";
?>


</body>
</html>

Merci;) j'espère que tu auras plus de kestion ou des trucs inexplicables et si c'est le cas merci de relire Commentaire de : domxml le 28/12/2006 10:40:21

signaler à un administrateur
Commentaire de domxml le 28/12/2006 15:35:45

dsl apparament ya un mauvais affichage des caractères russes mais tu peux mettre le carcatère russe dans la variable $str pour bien voir le cas et surtout que la fonction utf8_decode Convertit seuelement les chaines UTF-8 en ISO-8859-1  
et que pour les autres langues il affiche "??????????"
Bien à toi :)

signaler à un administrateur
Commentaire de malalam le 28/12/2006 16:29:23 administrateur CS

ben oui, ça convertit de l'utf8...ou vers l'utf8...
utf8_decode convertit de l'utf8 vers de l'iso 8859-1. Forcément, si ta chaîne n'est pas de l'utf8, ou de l'iso 8859-1 pour l'inverse, tu vas avoir des soucis. Mais dans ce cas c'est qu'il y a un soucis dans la maîtrise de l'encodage dans ton code. Tu es censé savoir ce que tu reçois...

signaler à un administrateur
Commentaire de thunderfear le 09/04/2007 18:47:51

J'en avais justement besoin ^^


10/10 ;)

signaler à un administrateur
Commentaire de synople le 19/11/2007 23:23:53 10/10

MERCI MILLE FOIS, TU VIENS DE ME SAUVER LA MISE SUR UN PB QUI ME PRENAIT LA TETE DEPUIS 1 SEMAINE SUE UNE BOUTIQUE DE ECOMMERCE. JE T'OFFRE UNE BIERE A L'OCCASION : -)

signaler à un administrateur
Commentaire de linerok le 29/11/2007 18:16:43 8/10

Pareil que SYNOPLE, sans la bière !
Franchement t'as résolu tous mes problèmes d'un coup d'un seul,  cher DOMXML !

signaler à un administrateur
Commentaire de c_anrico le 28/01/2008 13:44:31

Parfait, tout ce que je cherchais :)

signaler à un administrateur
Commentaire de TheGuern le 25/03/2008 10:25:55 8/10

Très bien pour la fonction is_utf8($string) permettant de trouver l'encodage d'un caractère ou d'un chaîne. Comme quoi il faudrait un peu plus visiter le site du W3C...

signaler à un administrateur
Commentaire de tom0602 le 08/10/2008 21:12:07 8/10

Merci bcp :)

Ajouter un commentaire

Discussions en rapport avec ce code source dans le forum

$GLOBALS + utf8_decode() [ par mattdelavega ] BonjourJ'ai mon flash qui envoi par $POST des variables &#224; mon php...petit probl&#232;me ... le format c'est du utf8 !Donc mes lettres accentu&#23 Problème d'accents dans l'url [ par d_alma ] Bonjour, Je suis en train de programmer une 'phototh&#232;que'. Les photos sont sur un serveur FTP. Les r&#233;pertoires ont souvent un nom comportan HELP PLEASE [ par matheo2005 ] Bonjour j'ai cr&#233;e un formulaire sous flash (grace a un code source trouv&#233; sur flashkod) j'ai change toute les variables avec le nom de mes v utf8_encode(); [ par WhiteDwarf ] Bonsoir, j'ai une petite question, je travaille actuellement sur un site multilangue, et je cherche &#224; ce que le russe soit accept&#233; par le ph MySQL et Multilingue [ par WhiteDwarf ] Salut, je reviens avec mes problèmes de gestion multilangue Alors voila le problème est simple, je récupère nom, prénom, mot de passe... dans un formu Problème insertion caractère coréen dans requête SQL [ par oupsoupsoups ] Bonjour,je dois réaliser un formulaire php en coréen cependant je n'arrive pas à insérer de caractères corréen correctement dans ma table sql. J'arriv Reception formulaire caractères chinois [ par stesch ] Bonjour,J'utilise un formulaire flash et envoie le contenu des champs via une page php.En francais, tout va bien.Lorsque l'on tape du Chinois, les car Encodage ou pas [ par codefalse ] Bonjour à tous :)J'ai codé un ptit site rapide avec bdd. J'ai indique aux headers que l'encodage serait en utf-8, mes fichiers étaient encodés en utf8 probleme avec move_uploaded_file et UTF8 [ par DJTIME ] Voici un bout de code pris du net que j'ai utilisé pour l'upload de fichier sur mon site (qui n'est pas encore en ligne vu qu'il marche po!)Bref!! ca utf16 vers UTF8 [ par studenttours ] bonjour,je travaille actuellement sur une base de donnée mysql configurée au départ en codage UTF16, je voudrais la convertir en UTF8: j'ai exporté la


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :

Comparez les prix Nouvelle version

Photothèque Nouveau !



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
Temps d'éxécution de la page : 0,452 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.