begin process at 2010 02 09 00:15:13
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Chaîne de caratère

 > MARRE UN COUP UTF8 UN COUP ISO

MARRE UN COUP UTF8 UN COUP ISO


 Information sur la source

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

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
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é :6 353 / 119

Auteur : cedriclomb

Ecrire un message privé
Site perso
Ce membre participe au partage de revenus publicitaires
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->a nalyse($mot).' <br />';
    }

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

ob_start('convertstr');

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

?>

 Fichier Zip

Les Membres Club peuvent 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

 Sources du même auteur

IFSETOR POUR PHP5
Source avec Zip Source avec une capture CLASS DE MENU DÉROULANT PHP5
Source avec Zip Source avec une capture AGENDA BASÉ SUR FLUX RSS PRÉSENTÉ EN TABLEAU OU EN AGENDA !
Source avec Zip GENERATEUR DE PLAQUETTE GRAPHIQUE V1.1
Source avec Zip Source avec une capture TRI DE CONTACTS MSN

 Sources de la même categorie

Source avec Zip GÉNÉRER UN MOT DE PASS ALÉATOIRE par narkos2
UNICODE TO HTML ENTITIES par CrazyShooter
Source avec Zip DÉBUTANT : FONCTION POUR TRANSFORMER UN TEMPS EN SECONDES EN... par MonkeyIsBack
FONCTION QUI GÉNÈRE UN CODE GRÂCE À L'ORTOGRAPHE ET LA PRONO... par foofymany
Source avec Zip TRADUCTION DE FICHIERS DE LANGUE AVEC GOOGLE GTRANSLATE par madislak

Commentaires et avis

Commentaire de garfield90 le 11/12/2007 17:48:07

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

Commentaire de cedriclomb le 11/12/2007 17:50:22

c'est quoi ton mb_* ??

Commentaire de mitchi01 le 11/12/2007 17:50:58

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

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

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 ...

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)

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 ?

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.

Commentaire de LocalStone le 11/12/2007 22:22:54

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

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.

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... :-(

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.

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


Appels d'offres

Sondage...

Comparez les prix

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
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,640 sec (4)

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