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 !

MARRE UN COUP UTF8 UN COUP ISO


Information sur la source

Catégorie :Chaîne de caratère Classé sous : utf8 encode, utf8 decode, caratères Niveau : Initié Date de création : 11/12/2007 Date de mise à jour : 11/12/2007 16:57:23 Vu / téléchargé: 5 559 / 105

Note :
8,5 / 10 - par 2 personnes
8,50 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

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


Description

Bon alors comme la migration des scripts de l'utf8 a l'iso n'est pas encore finit, j'ai essayé de faire un convertisseur qui analyse l'encodage de la chaine est fait la conversion necessaire.

La seule chose pour avoir des caractères corrects c'est donc de connaitre quel est la sortie (http-equiv final)

Cas 1 vous souhaitez une sortie en utf-8 a partir de sources mixtes, alors utilisés :
stringConverter_utf8
Et en iso-8859-1 :
stringConverter_iso
 

Source

  • <?php
  • /**
  • * Transforme toutes les chaines qu'elles soit utf8 ou iso en utf8
  • */
  • class stringConverter_utf8 extends stringConverter {
  • function convertString($string)
  • {
  • if ($this->string_type == 'utf-8')
  • return $string;
  • else
  • return utf8_encode($string);
  • }
  • }
  • /**
  • * Transforme touT en iso
  • */
  • class stringConverter_iso extends stringConverter {
  • function convertString($string)
  • {
  • if ($this->string_type == 'utf-8')
  • return utf8_decode($string);
  • else
  • return $string;
  • }
  • }
  • class stringConverter {
  • var $string_type = ''; //Type d'encodage
  • var $utf = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789²&é"\'(-è_çà)=~#{[|`\^@]}¨^$£¤ù%*µ!§:/;.?,<>€îïâûü&#968;&#936;&#969;&#937;&#935;&#967;&#934;&#966;ÛÊËÜÏÎñÑõÕ‰ƒ¾½¼³¹º±×÷ÁáÀÂÅåãÃäÄæÆçÇéÉÈÌíÍìøØßÿ´`&#945;&#913;&#946;&#914;&#947;&#915;&#948;&#916;&#949;&#917;&#950;&#918;&#951;&#919;&#952;&#920;&#953;&#921;&#954;&#922;&#955;&#923;&#956;&#924;&#957;&#925;&#958;&#926;&#959;&#927;&#960;&#928;&#961;&#929;&#963;&#962;&#931;&#964;&#932;&#965;&#933;–—¡¿&¢©µ·¶£®§¥™"«»…';
  • function __construct(){
  • $this->utf8_caracteres= preg_split('//', $this->utf, -1, PREG_SPLIT_NO_EMPTY);
  • }
  • function analyse($string)
  • {
  • $this->chars = preg_split('//', $string, -1, PREG_SPLIT_NO_EMPTY);
  • foreach($this->chars as $char) {
  • if ($this->string_type == '')
  • $this->string_type = $this->analyseChar($char);
  • else{
  • $s=$this->convertString($string);
  • $analyser->string_type='';
  • return $s;
  • }
  • }
  • return $string;
  • }
  • protected function analyseChar($char)
  • {
  • if (utf8_encode($char) == utf8_decode($char))
  • return $this->string_type;
  • if (in_array($char,$this->utf8_caracteres))
  • return 'utf-8';
  • return 'iso-8859-1';
  • }
  • }
  • ?>
<?php
/**
* Transforme toutes les chaines qu'elles soit utf8 ou iso en utf8
*/
class stringConverter_utf8 extends stringConverter {
    function convertString($string)
    {
        if ($this->string_type == 'utf-8')
            return $string;
        else
            return utf8_encode($string);
    }
}
/**
* Transforme touT en iso
*/
class stringConverter_iso extends stringConverter {
    function convertString($string)
    {
        if ($this->string_type == 'utf-8')
            return utf8_decode($string);
        else
            return $string;
    }
}

class stringConverter {
    var $string_type = ''; //Type d'encodage
    var $utf = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789²&é"\'(-è_çà)=~#{[|`\^@]}¨^$£¤ù%*µ!§:/;.?,<>€îïâûü&#968;&#936;&#969;&#937;&#935;&#967;&#934;&#966;ÛÊËÜÏÎñÑõÕ‰ƒ¾½¼³¹º±×÷ÁáÀÂÅåãÃäÄæÆçÇéÉÈÌíÍìøØßÿ´`&#945;&#913;&#946;&#914;&#947;&#915;&#948;&#916;&#949;&#917;&#950;&#918;&#951;&#919;&#952;&#920;&#953;&#921;&#954;&#922;&#955;&#923;&#956;&#924;&#957;&#925;&#958;&#926;&#959;&#927;&#960;&#928;&#961;&#929;&#963;&#962;&#931;&#964;&#932;&#965;&#933;–—¡¿&¢©µ·¶£®§¥™"«»…';

	function __construct(){
		$this->utf8_caracteres= preg_split('//', $this->utf, -1, PREG_SPLIT_NO_EMPTY);
	}
    function analyse($string)
    {
        $this->chars = preg_split('//', $string, -1, PREG_SPLIT_NO_EMPTY);
        foreach($this->chars as $char) {
            if ($this->string_type == '')
                $this->string_type = $this->analyseChar($char);
            else{
                $s=$this->convertString($string);
                $analyser->string_type='';
                return $s;
                }
        }
        return $string;
    }

    protected function analyseChar($char)
    {
        if (utf8_encode($char) == utf8_decode($char))
            return $this->string_type;
        if (in_array($char,$this->utf8_caracteres))
            return 'utf-8';
        return 'iso-8859-1';
    }
}

?>

Conclusion

A venir si j'y arrive un detecteur automatique de la sortie

Petit truc pour convertir un fichier complètement mélangé
<?php
function convertstr($buf)
{
    require_once 'analyser.php';
    $analyser = new stringConverter_iso;
    $bufs = preg_split('/ /', $buf, -1, PREG_SPLIT_NO_EMPTY); //Sépare les mots
    $outpout=array();
    foreach($bufs as $mot) {
$outpout[]=$analyser->analyse($mot);
//$buf.=$mot.'->'.$analyser->string_type.'='.$analyser->analyse($mot).' <br />';
    }

$outpout=implode(' ',$outpout);
    return $outpout;
}

ob_start('convertstr');

?>
Votre page qui ressemble a rien la  !
<?php
ob_end_flush();

?>
 

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

Historique

11 décembre 2007 16:27:32 :
Grosse boulette pas de return si la chaine est quelquonques
11 décembre 2007 16:56:06 :
Modification de la classe principale (ajout du constructeur et ajout de caractères)
11 décembre 2007 16:57:23 :
Ajout de __construct et de caractères utf8

Commentaires et avis

signaler à un administrateur
Commentaire de garfield90 le 11/12/2007 17:48:07

un coup de mb_* et/consort, ca irait bien aussi.

signaler à un administrateur
Commentaire de cedriclomb le 11/12/2007 17:50:22

c'est quoi ton mb_* ??

signaler à un administrateur
Commentaire de mitchi01 le 11/12/2007 17:50:58

Erreurs dans le chemin du fichier 'analyser.php' => '../analyser.php'
Fautes d'orthographe
...

signaler à un administrateur
Commentaire de garfield90 le 11/12/2007 18:00:24

http://fr.php.net/manual-lookup.php?pattern=mb_

permet de gerer de maniere les chaines de caractere multibytes (=> mb :P) et autres en fonction du charset

signaler à un administrateur
Commentaire de LocalStone le 11/12/2007 19:28:14

Euh ... Petit question qui j'espère ne va pas causer un débat envenimé. Il vaut mieux utiliser l'ISO ou l'UTF ? Perso, j'utilise l'UTF, mais c'est juste parce qu'une fois un prof avait dit que c'était bien. Mais en réalité, je sais pas ...

signaler à un administrateur
Commentaire de garfield90 le 11/12/2007 19:35:23

Le principal interet de l'UTF-8 (UTF-16), c'est que ca prends en compte quasi toutes les caractères de toutes langues connues (voire plus :P) donc aucun probleme de portage à une autre traduction (en particulier sur les alphabets non roman)

signaler à un administrateur
Commentaire de LocalStone le 11/12/2007 22:14:54

Ok. Bah alors pourquoi l'auteur de la source dit qu'il migre de UTF-8 vers ISO ? A quoi ça peut bien servir ?

signaler à un administrateur
Commentaire de cedriclomb le 11/12/2007 22:21:33

Alors la source permet de passer sois de utf8 vers Iso soit de iso vers utf8 car le problème pour le moment c'est que l'on a des systeme qui ont évolués et sont passés en utf-8 et d'autres sont encore en iso et moi j'ai le droits a une appli ou la moitié est en iso et l'autre en utf-8 donc vive le mélange, donc pour que a l'écran j'ai jamais de problèmes d'accents j'ai fais cette classe.

signaler à un administrateur
Commentaire de LocalStone le 11/12/2007 22:22:54

Réponse claire, nette, efficace ... Merci !

signaler à un administrateur
Commentaire de WhiteDwarf le 12/12/2007 15:09:49 8/10

De plus ça peut servir dans les sites avec caractères latins et caractères cyrilliques (site franco-russe par exemple).

Bonne source, merci, ça va pas mal me servir je pense.

signaler à un administrateur
Commentaire de malalam le 13/12/2007 20:33:35 administrateur CS

Hello,

les caractères cyrilliques sont très bien supportés par iso-8859-*
Ceci dit, la problématique est épineuse et ce code intéressant. Même si du mbstring voire de l'iconv le rendent caduque.
Au passage, utf-8 / utf-16 c'est quand même très différent. J'en sais quelque chose, je me bats actuellement sur le problème du support unicode entre des applicatifs php et une bdd mssql...et c'est pas gagné. Voire même, peut-être est-ce déjà perdu... :-(

signaler à un administrateur
Commentaire de malalam le 13/12/2007 20:39:26 administrateur CS 9/10

Au passage, je mets une bonne note. Non pas sur la qualité du coce parce qu'il y a à redire (même si c'est loin d'être pourri hein, c'est même plutôt bien, mais il y a des erreurs : les comparaisons non typées, la calsse StringConverter qui devrait être abstraite et déclarer la méthode convertString(), cette dernière qui devrait être finale et éventuellement protégée...), mais pour le fait que c'est un code intéressant offrant une solution a une problématique récurrente.

signaler à un administrateur
Commentaire de cedriclomb le 14/12/2007 09:52:03

Bonjour,

Merci, MALALAM , par contre pour iconv, si j'ai compris php.net et ca c'est pas gagné, la conversion est la même pour toute la page ! Tandis que la je propose une conversion mot à mot, en gros pour ceux qui on des saisis en ISO des fichiers tpl en UTF-8 les fichiers de langues aussi et un header en ce que tu veux de doute façon l'affichage est dégeu.

Pour ce qui est de la 2ème remarque, je ne suis pas un programmeur objet pur, alors si tu pouvais m'expliquer quel est l'intérêt de mettre des interface des abstract est des implements, qui pour moi me donne l'impression de perdre du temps en tappant mon code, alors je pense que je changerai surement ma méthode

Ajouter un commentaire



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,577 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é.