PHP et Unicode - quel est le truc ?

Le
Denis Beauregard
Bonjour,

Je voudrais afficher le caractère Unicode 2533 (une sorte de T, voir
http://www.unicode.org/charts/PDF/U2500.pdf ).

J'ai suivi les instructions mais php.net est assez vague de ce côté.
J'ai essayé ce script :


<!DOCTYPE html PUBLIC "-//w3c//dtd html 4.0 transitional//en">
<html>
<head>
<meta http-equiv="Content-Type"
content="text/html; charset=UTF-8">
<meta name="Author" content="Denis Beauregard">
</head>
<body >

test[p{2533}]test

</body>
</html>


Il affiche test[p{2533}]test et non le caractère attendu.

Idem avec P.
X2533 donne %33

Donc, je conclus qu'il ne s'agit ici que d'expressions régulières
pour la recherche, sans rapport avec un affichage.

&#2533; affiche un caractère bizarre qui est peut-être celui demandé.

La documentation mentionne un mode UTF-8 sans donner plus de détails.
Je n'ai pas non plus d'exemple sur l'utilisation du Unicode en PHP.

1. Comment fait-on pour afficher ce caractère 2533 en HTML ou PHP.
2. Faut-il installer quelque chose dans le navigateur pour que
l'affichage se fasse ? J'ai essayé Seamonkey, FF et IE 8.

Le caractère semble visible si je choisis UTF-16 comme affichage,
donc il me semble que le jeu requis est présent dans le navigateur.
Par contre, si je place &#2533; au début du fichier, je n'ai pas
mon fameux caractère.


Denis
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses Page 1 / 3
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Sergio
Le #23606171
Le 26/07/2011 17:59, Denis Beauregard a écrit :
Bonjour,

Je voudrais afficher le caractère Unicode 2533 (une sorte de T, voir
http://www.unicode.org/charts/PDF/U2500.pdf ).

J'ai suivi les instructions mais php.net est assez vague de ce côté.
J'ai essayé ce script :


<html>
<head>
<meta http-equiv="Content-Type"
content="text/html; charset=UTF-8">
<meta name="Author" content="Denis Beauregard">
</head>
<body>

test[p{2533}]test

</body>
</html>



Là, je ne vois pas une once de PHP !

Soit tu mets :

test &#2533; test

(qui est du HTML)

Soit si tu veux du PHP :

<?php
echo "x2533" ;
?>


--
Serge http://leserged.online.fr/
Mon blog: http://cahierdesergio.free.fr/
Soutenez le libre: http://www.framasoft.org
Denis Beauregard
Le #23606411
Le Tue, 26 Jul 2011 18:16:19 +0200, Sergio
fr.comp.infosystemes.www.auteurs:

Le 26/07/2011 17:59, Denis Beauregard a écrit :
Bonjour,

Je voudrais afficher le caractère Unicode 2533 (une sorte de T, voir
http://www.unicode.org/charts/PDF/U2500.pdf ).

J'ai suivi les instructions mais php.net est assez vague de ce côté.
J'ai essayé ce script :


<html>
<head>
<meta http-equiv="Content-Type"
content="text/html; charset=UTF-8">
<meta name="Author" content="Denis Beauregard">
</head>
<body>

test[p{2533}]test

</body>
</html>



Là, je ne vois pas une once de PHP !

Soit tu mets :

test &#2533; test

(qui est du HTML)

Soit si tu veux du PHP :

<?php
echo "x2533" ;
?>




echo "x2533" donne le même %33 que j'obtenais.

Dans les faits, mon script va produire des dessins avec les caractères
de la série 2500-257F, quelque chose comme $a="----+----", le tout
suivi d'un echo a$.b$;

Je vois 3 difficultés:

1- affichage en html des caractères Unicode. Si cela passe sans
problème, les autres difficultés sont résolues.
2- manipuler les chaînes Unicode que je veux utiliser en PHP
3- affichage par le navigateur s'il faut ajouter quelque chose.


Denis
SAM
Le #23606401
Le 26/07/11 18:16, Sergio a écrit :
Le 26/07/2011 17:59, Denis Beauregard a écrit :
Bonjour,

Je voudrais afficher le caractère Unicode 2533 (une sorte de T, voir
http://www.unicode.org/charts/PDF/U2500.pdf ).



Soit si tu veux du PHP :

<?php
echo "x2533" ;
?>



et si on le veut en JavaScript :
hop! :
alert('u2533');


On pourra préférer : &#252C; ( x252C u252C )
qui est un peu plus gras

--
Stéphane Moriaux avec/with iMac-intel
SAM
Le #23606501
Le 26/07/11 19:53, Denis Beauregard a écrit :

Le 26/07/2011 17:59, Denis Beauregard a écrit :
Bonjour,

Je voudrais afficher le caractère Unicode 2533 (une sorte de T, voir
http://www.unicode.org/charts/PDF/U2500.pdf ).






echo "x2533" donne le même %33 que j'obtenais.



essayer avec :
echo 'u2533';
?

Dans les faits, mon script va produire des dessins avec les caractères
de la série 2500-257F, quelque chose comme $a="----+----", le tout



$a = '&#9472;&#9472;&#9472;&#9516;&#9472;&#9472;&#9472;';

peut-être ?

ou directement en utf-8 ?

───┬───


Du lien donné précédemment on pourra s'inspirer du tableau du CP437


--
Stéphane Moriaux avec/with iMac-intel
Denis Beauregard
Le #23606491
Le Tue, 26 Jul 2011 11:59:57 -0400, Denis Beauregard
fr.comp.infosystemes.www.auteurs:

Je voudrais afficher le caractère Unicode 2533 (une sorte de T, voir
http://www.unicode.org/charts/PDF/U2500.pdf ).



J'ai fini par découvrir l'astuce. Il suffit de faire par exemple :


&#x2533;

Curieusement, ma page est détectée comme latin1 par le navigateur mais
ce caractère est affiché en unicode.


Denis
Denis Beauregard
Le #23606481
Le Tue, 26 Jul 2011 20:03:35 +0200, SAM
fr.comp.infosystemes.www.auteurs:

Le 26/07/11 19:53, Denis Beauregard a écrit :

Le 26/07/2011 17:59, Denis Beauregard a écrit :
Bonjour,

Je voudrais afficher le caractère Unicode 2533 (une sorte de T, voir
http://www.unicode.org/charts/PDF/U2500.pdf ).






echo "x2533" donne le même %33 que j'obtenais.



essayer avec :
echo 'u2533';
?



Avec

$dessin = "-+-&#x2501;&#x2533;&#x2501;u2501u2533u2501";

seul le &#x donne le bonne résultat. u est affiché tel quel.


Dans les faits, mon script va produire des dessins avec les caractères
de la série 2500-257F, quelque chose comme $a="----+----", le tout



$a = '&#9472;&#9472;&#9472;&#9516;&#9472;&#9472;&#9472;';

peut-être ?

ou directement en utf-8 ?

???????


Du lien donné précédemment on pourra s'inspirer du tableau du CP437



Le tableau est intéressant. Je dois recycler du code écrit pour DOS
à l'époque, en CP850 et variations, et je sais que j'utilisais ces
caractères. En fait, je ré-écris en PHP un éditeur qui était en ASM
8086 pour DOS et je dois sans doute prévoir la conversion des accents.

L'affichage à l'écran est vraiment autre chose.


Denis
SAM
Le #23606541
Le 26/07/11 20:12, Denis Beauregard a écrit :
Le Tue, 26 Jul 2011 20:03:35 +0200, SAM
fr.comp.infosystemes.www.auteurs:

ou directement en utf-8 ?

???????





heu ...

ou directement en utf-8 ?

───┬───


si le news-reader ne le fait pas tout seul, passer en affichage UTF-8

--
Stéphane Moriaux avec/with iMac-intel
Olivier Miakinen
Le #23606681
Le 26/07/2011 19:53, Denis Beauregard a écrit :

Je voudrais afficher le caractère Unicode 2533 (une sorte de T, voir
http://www.unicode.org/charts/PDF/U2500.pdf ).





echo "x2533" donne le même %33 que j'obtenais.



Oui, cela correspond à ce que l'on peut lire ici :

http://www.php.net/manual/fr/language.types.string.php#language.types.string.syntax.double
x[0-9A-Fa-f]{1,2} La séquence de caractères correspondant à une
expression régulière est un caractère, en notation hexadécimale

Le « {1,2} » veut dire qu'il ne prend en compte que deux chiffres hexa
au maximum, donc "x25" suivi de "3" et encore de "3" : "%33".


Tiens, voici une page en or à mettre dans tes marque-pages :
http://people.w3.org/rishida/scripts/uniview.fr/conversion.html

Tu mets 2533 dans le cadre « Numéros de caractères en hex », puis tu
cliques dans un autre cadre, et tu obtiens :

======================================================= 2533 (Numéros de caractères en hex)
┳ (Caractères)
E2 94 B3 (Unités de code UTF-8)
2533 (Unités de code UTF-16)
&#x2533; (Appels de caractère numériques hex)
&#9523; (Appels de caractère numériques décimaux)
=======================================================
Les différentes possibilités sont donc :
==================================================================== ┳ (si le codage de ton fichier admet Unicode, par exemple UTF-8)
<?php echo "xE2x94xB3"; ?> (si le codage *est* UTF-8)
&#x2533; (si le codage est compatible Ascii, tel Latin1 ou UTF-8)
&#9523; (si le codage est compatible Ascii, tel Latin1 ou UTF-8)
====================================================================
Attention dans les deux derniers cas à ne pas oublier le point-virgule !


Cordialement,
--
Olivier Miakinen
Olivier Miakinen
Le #23606731
Le 26/07/2011 20:03, Denis Beauregard a écrit :

J'ai fini par découvrir l'astuce. Il suffit de faire par exemple :

&#x2533;



Oui, c'est une référence de caractère numérique (hexadécimale) et c'est
défini dans HTML :
http://www.la-grange.net/w3c/html4.01/charset.html#h-5.3.1

Curieusement, ma page est détectée comme latin1 par le navigateur



C'est sûrement que l'entête HTTP déclare du Latin1, puisque le meta
http-equiv déclare UTF-8. Pour que les deux soient corrects à la fois,
il faut que la page ne contienne que de l'US-ASCII, ce qui est assez
restrictif. ;-) Il vaudrait mieux que tu choisisses l'un ou l'autre
(Latin1 ou UTF-8) et que tu changes la déclaration qui affirme le
contraire.

mais ce caractère est affiché en unicode.



Par définition, une référence de caractère numérique donne le numéro
Unicode du caractère, quel que soit le charset du document. Mais cela
fonctionne parce que tous les caractères réellement utilisés pour cette
référence, à savoir '&', '#', 'x', '2', '5', '3', '3' et ';', sont de
l'US-ASCII, et que US-ASCII est compatible à la fois avec Latin1 et
avec UTF-8. J'espère que tu me comprends, parce que c'est une notion
assez importante à bien saisir. Si tu n'as pas compris, demande !

Cordialement,
--
Olivier Miakinen
Denis Beauregard
Le #23607071
Bonjour,


Pour les curieux qui voudraient voir le résultat, c'est sur
http://www.francogene.com/SE/index.php

J'ai encore quelques problèmes à résoudre. Tout d'abord, remplacer le
X par quelque chose qui ressemble plus à une astérisque mais qui
soit de la même largeur que les autres caractères.

Voir colonnes puis P(08) strtrim

Avec d'autres caractères que le X, la ligne au-dessus de "NUL Ne rien
faire", n'est pas à sa place. Le X fait partie de la page 25xx. C'est
comme si Seamonkey (que j'ai utilisé pour mes tests) gardait la même
largeur que le caractère précédent quand on en utilise un plus étroit.


Un autre problème est l'espacement des caractères. Avec Gecko/20110420
SeaMonkey/2.0.14, c'est parfait horizontalement mais les traits sont
espacés verticalement. Avec FireFox 4.01, il y a des espaces dans les
deux axes. IE 8 agit comme Seamonkey. Je n'ai pas testé avec d'autres
navigateurs... Je suppose que pour l'axe vertical, c'est une question
de CSS, mais pour l'horizontal, peut-être une valeur par défaut
différente avec FF et que je pourrais changer.


Et mon problème majeur, ce sera de modifier le texte et les schémas,
mais c'est mon problème je pense. J'ai vu qu'il y a un grand nombre
d'éditeurs de texte pour Javascript.


Denis

P.S. Pour ceux qui n'ont pas compris, c'est un éditeur de code de
programmation avec du code de C++. Dans les années 1980, j'avais
aussi des utilisateurs avec d'autres langages comme le Fortran, le
Pascal et le PL/M. Et mon premier prototype a été écrit en Basic...
Publicité
Poster une réponse
Anonyme