Marre un coup utf8 un coup iso

Soyez le premier à donner votre avis sur cette source.

Vue 9 621 fois - Téléchargée 209 fois

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 / Exemple :


<?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();

?>

Codes Sources

A voir également

Ajouter un commentaire Commentaires
Messages postés
275
Date d'inscription
samedi 19 novembre 2005
Statut
Membre
Dernière intervention
27 avril 2010
1
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
Messages postés
10840
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
22
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.
Messages postés
10840
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
22
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... :-(
Messages postés
510
Date d'inscription
samedi 29 décembre 2001
Statut
Membre
Dernière intervention
23 mai 2008

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.
Messages postés
514
Date d'inscription
mercredi 19 mars 2003
Statut
Membre
Dernière intervention
1 mars 2009

Réponse claire, nette, efficace ... Merci !
Afficher les 13 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.