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

vilhjalms Messages postés 591 Date d'inscription mercredi 20 juillet 2005 Statut Membre Dernière intervention 16 juillet 2009 - 27 déc. 2006 à 15:48
patastronch Messages postés 3 Date d'inscription samedi 5 mars 2005 Statut Membre Dernière intervention 8 novembre 2010 - 8 nov. 2010 à 15:28
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/40867-convertir-une-chaine-utf8-contenant-des-caracteres-francais-en-iso-8859-1

patastronch Messages postés 3 Date d'inscription samedi 5 mars 2005 Statut Membre Dernière intervention 8 novembre 2010
8 nov. 2010 à 15:28
Après avoir testé et corrigé mon code :

function convert($str){
$str_temp2=$str;
$str_res="";
$str_para=2000;
while (strlen($str_temp2)>$str_para){
$str_temp=substr($str_temp2,0,$str_para);
$str_temp2=substr($str_temp2,$str_para,strlen($str_temp2)-$str_para);
$str_res=$str_res.utf8_encode(convertUTF8_to_8859($str_temp));
}
$str_res=$str_res.utf8_encode(convertUTF8_to_8859($str_temp2));
return $str_res;
}

Au passage si quelqu'un a une idée sur le pourquoi sa fonction ne prend pas les chaines de caractère trop longues ca m'intéresse.
patastronch Messages postés 3 Date d'inscription samedi 5 mars 2005 Statut Membre Dernière intervention 8 novembre 2010
8 nov. 2010 à 15:12
J'ai résolu de manière un peu bourrine le problème :

function convert($str){
$str_temp2=$str;
$str_res="";
if(strlen($str_temp2)>1000){
while (strlen($str_temp2)>1000){
$str_temp=substr($str_temp2,0,999);
$str_temp2=substr($str_temp2,1000,strlen($str_temp2)-1);
$str_res=$str_res.utf8_encode(convertUTF8_to_8859($str_temp));
}
}else{
$str_res=utf8_encode(convertUTF8_to_8859($str_temp2));
}
return $str_res;
}
patastronch Messages postés 3 Date d'inscription samedi 5 mars 2005 Statut Membre Dernière intervention 8 novembre 2010
8 nov. 2010 à 14:52
J'ai le même soucis que ORDLA. La fonction fonctionne a merveille avec les chaines pas trop longue mais des qu'elle dépasse un certain nombre de caractère ca "ne fait plus rien".

Dommage ...
cs_ordla Messages postés 2 Date d'inscription samedi 15 août 2009 Statut Membre Dernière intervention 18 août 2009
18 août 2009 à 22:50
je vois pas bien où est le problème ça marche pas chez moi pour une langue chaîne: j'ai une chaîne de 4700 caractère, ce code m'affiche une page blanche sans message d'erreur sans rien... je comprend pas, je n'utilise ni GET ni rien je change juste la valeur de $str que je lui affecte une chaîne plus langue.
domxml Messages postés 7 Date d'inscription lundi 10 janvier 2005 Statut Membre Dernière intervention 16 août 2009
16 août 2009 à 12:31
Bonjour ORDLA,
J'ai fait un test de mon coté, la fonction ne pose un problème de limit de nombre de caractère et d'ailleurs y a pas de raison. Vérifie de ton coté sur le $str n'est pas passé en GET ou autre chose de ceci.
Cdt
cs_ordla Messages postés 2 Date d'inscription samedi 15 août 2009 Statut Membre Dernière intervention 18 août 2009
15 août 2009 à 17:34
Bonjour,
j'étais tout à l'heure à la recherhce de ton script j'ai tombé sur le tien c'es merveilant mais un grand probleme s'est posé c'est que ta vaiable $str ne peut prendre une chaîne son nombre de caractères supérieur à 404. y a-t-il une solution??
tom0602 Messages postés 1 Date d'inscription mercredi 1 mars 2006 Statut Membre Dernière intervention 8 octobre 2008
8 oct. 2008 à 21:12
Merci bcp :)
TheGuern Messages postés 32 Date d'inscription mercredi 7 mai 2003 Statut Membre Dernière intervention 25 mars 2008
25 mars 2008 à 10:25
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...
Utilisateur anonyme
28 janv. 2008 à 13:44
Parfait, tout ce que je cherchais :)
linerok Messages postés 1 Date d'inscription lundi 18 juin 2007 Statut Membre Dernière intervention 29 novembre 2007
29 nov. 2007 à 18:16
Pareil que SYNOPLE, sans la bière !
Franchement t'as résolu tous mes problèmes d'un coup d'un seul, cher DOMXML !
synople Messages postés 6 Date d'inscription vendredi 7 mars 2003 Statut Membre Dernière intervention 19 novembre 2007
19 nov. 2007 à 23:23
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 : -)
thunderfear Messages postés 99 Date d'inscription lundi 8 septembre 2003 Statut Membre Dernière intervention 1 septembre 2010
9 avril 2007 à 18:47
J'en avais justement besoin ^^


10/10 ;)
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
28 déc. 2006 à 16:29
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...
domxml Messages postés 7 Date d'inscription lundi 10 janvier 2005 Statut Membre Dernière intervention 16 août 2009
28 déc. 2006 à 15:35
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 :)
domxml Messages postés 7 Date d'inscription lundi 10 janvier 2005 Statut Membre Dernière intervention 16 août 2009
28 déc. 2006 à 15:30
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>

<?
$str = "ВЛАСТИ РОССИИ";
echo "affichage de la chaine russe sans décodage utf-8==> $str
";
$str = utf8_decode($str);
echo "affichage de la chaine russe avec décodage utf-8 ==>$str
";
?>



</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
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
28 déc. 2006 à 14:42
Donc quoi ? Pourquoi dois-tu le vérifier ?
domxml Messages postés 7 Date d'inscription lundi 10 janvier 2005 Statut Membre Dernière intervention 16 août 2009
28 déc. 2006 à 13:02
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
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
28 déc. 2006 à 12:10
Ca n'expolique pas pourquoi tu n'utilises pas directement utf8_decode () et utf8_encode () ... ? Quel apport ?
domxml Messages postés 7 Date d'inscription lundi 10 janvier 2005 Statut Membre Dernière intervention 16 août 2009
28 déc. 2006 à 10:40
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
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
28 déc. 2006 à 09:23
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.
vilhjalms Messages postés 591 Date d'inscription mercredi 20 juillet 2005 Statut Membre Dernière intervention 16 juillet 2009 2
27 déc. 2006 à 15:48
utf8_decode("communauté et espérons"); => communauté et espérons

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