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 94px. Mais cela marche mal avec les caractères utf8 codés sur plusieurs bits, ceux ci ne s'affichent pas correctements.. 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.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80 <?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['≠'] = 6; $table['≤'] = 5; $table['≥'] = 5; $table['→'] = 5; $table['α'] = 5; $table['γ'] = 5; $table['μ'] = 5; $table['π'] = 6; $table['ρ'] = 5; $table['σ'] = 5; $table['τ'] = 5; $table['Φ'] = 6; $table['Δ'] = 6; $table['Σ'] = 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 αβγδεθλμπρστΦχ→≡≤≥≠³²√"; $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; ?>
edit: il semble que certains caractères s'affichent mal sur le forum (tous les &# ... ), désolés.
Partager