Parser une chaine UTF8 en php

Signaler
Messages postés
37
Date d'inscription
dimanche 24 février 2008
Statut
Membre
Dernière intervention
18 mai 2010
-
Messages postés
37
Date d'inscription
dimanche 24 février 2008
Statut
Membre
Dernière intervention
18 mai 2010
-
Bonjour,
je ne parvient pas à "parser" une chaine en utf8.
Chaque caractère à une largeur en pixel définie dans une table, et mon système passe une ligne tous les 84px. Mais cela marche mal avec les caractères utf8 codés sur plusieurs bits.. J'ai mis mon code en dessous, pourriez vous m'aider ?

Merci d'avance !
Pierre.

ps: j'ai besoin des caractères spéciaux (quelques lettre grecs et symboles mathématiques) donc je ne souhaite pas les supprimer.


<?php
$table = array();
// tous les caracteres font 4 pixel éxéptés ceux-ci :
$table['à'] = 5;
$table['f'] = 3;
$table['i'] = 2;
$table['l'] = 3;
$table['m'] = 6;
$table['s'] = 3;
$table['t'] = 3;
$table['û'] = 5;
$table['w'] = 6;
$table['z'] = 5;

$table['µ'] = 5;
$table['°'] = 5;
$table['!'] = 2;
$table['#'] = 6;
$table['$'] = 6;
$table['&'] = 5;
$table['('] = 3;
$table[')'] = 3;
$table[','] = 3;
$table['.'] = 2;
$table['\''] = 2;
$table['-'] = 4;
$table[';'] = 3;
$table['@'] = 6;
$table['['] = 3;
$table[']'] = 3;
$table['|'] = 2;
$table[' '] = 1;
$table['*'] = 6;

$table['&#8800;'] = 6;
$table['&#8804;'] = 5;
$table['&#8805;'] = 5;
$table['&#8594;'] = 5;

$table['&#945;'] = 5;
$table['&#947;'] = 5;
$table['&#956;'] = 5;
$table['&#960;'] = 6;
$table['&#961;'] = 5;
$table['&#963;'] = 5;
$table['&#964;'] = 5;
$table['&#934;'] = 6;

$table['&#916;'] = 6;
$table['&#931;'] = 5;
// exemple de texte qui ne marche pas car de nombreux caracteres
// sont codés sur plusieurs bits en UTF8
$textedebut = "Iñtërnâtiônàlizætiøn  &#945;&#946;&#947;&#948;&#949;&#952;&#955;&#956;&#960;&#961;&#963;&#964;&#934;&#967;&#8594;&#8801;&#8804;&#8805;&#8800;³²&#8730;"; 
$textedebut = str_replace("\r\n","\n",$textedebut);
$tailleLigne = 0;
$texte = "";
$tCaract = 0;

for($z=0; $z<strlen($textedebut); $z++) {

if($textedebut[$z] == "\n") {
$tailleLigne = 0;
}
else {
$tCaract = 4;
if(array_key_exists($textedebut[$z], $table)){
$tCaract = $table[$textedebut[$z]];
}
$tailleLigne += $tCaract;
if ($tailleLigne > 93) {
$texte.= "\n";
$tailleLigne = $tCaract;
}
}
$texte .= $textedebut[$z];

}
echo $texte;
?>

2 réponses

Messages postés
37
Date d'inscription
dimanche 24 février 2008
Statut
Membre
Dernière intervention
18 mai 2010

certains caractères ne semblent pas vouloir passer sur le forum non plus ^^ : il n'y a pas de θ dans le texte que j'ai mis
Messages postés
37
Date d'inscription
dimanche 24 février 2008
Statut
Membre
Dernière intervention
18 mai 2010

problème résolu avec mb_substr($textedebut,$z,1),
et mb_strlen($textedebut);