20:4513012004
Bookmarks v2.0, PHP et iso-8859-1
Par Moe - Site / Dév
J'aime bien faire mumuse avec le PHP, construire des fonctions, faire des requêtes MySQL.
Dernièrement je me suis attaqué à l'amélioration des bookmarks de Nacara.
La première chose que j'ai faite a été de construire une fonction pour afficher l'arborescence des dossiers explorés, ce qui a permis :
- d'indiquer au visiteur où il se trouve lorsqu'il navigue dans les bookmarks
- d'avoir un bon référencement google (exemple ou exemple)
Ensuite, petite refonte graphique, le blanc sur blanc c'est mauvais pour la rétine.
Et ajout d'une fonction pour éditer les bookmarks depuis l'interface d'administration, histoire de pouvoir éditer un lien sans passer par phpMyAdmin.
Et aujourd'hui, j'ai rajouté une valeur langue pour chaque lien / enregistrement MySQL. Le résultat est semblable à ceux que les utilisateurs de Gecko peuvent voir ici : la ou les langues du lien sont affichées entre crochets derrière le lien.
Facultatif, mais moi je me le mets ...
Mais pour rendre la chose accessible à ceux qui utilisent IE, j'ai choisi de faire ça sans CSS.
La langue est affichée dans le lien par l'intermédiaire d'un hreflang="", et aprés le lien en texte normal.
Je remercie pompage.net pour l'aide qu'ils m'ont apportée.
Voici donc les nouveaux bookmarks.
Mon prochain projet est la réalisation d'un shoutbox en PHP, pour se substituer aux solutions dédiées, qui font appel à des pages venues d'autres serveurs. J'en ai pas besoin d'une shoutbox, je fais ça pour m'amuser, et si ça intéresse quelqu'un, je lui donnerais mon code bien volontier.
A mesure que je progresse PHP, je deviens de plus en plus productif, ça devient de plus en plus facile, alors il faut bien que je mettre ça à contribution.
Si ça vous intéresse, n'hésitez-pas à m'encourager :)
Autre chose : je me suis rendu compte que mon iso-8859-1 n'avait pas de sens, un UTF-8 semble mieux convenir, mais il demande de n'utiliser que des entités à la place des lettres accentuées ou des caractères, entre autre choses. Par exemple é doit apparaître comme é
Commentaires
On peut se passer des entités. Pour faire de l'UTF-8 tu dois avoir un éditeur de texte qui charge et enregistre dans ce format. Chaque caractère fera alors de 1 à 6 octets. Les caractères ascii feront 1 octet, les caractères accentués occidentaux sur 2 octets, etc.
Bon après malheureusement le PHP est très mauvais pour gérer les encodages autres que iso-8859-1 :(
Tiens, un Darken, j'avais justement oublié de faire appel à toi dans le post. :)
Donc déjà, quel est l'intérêt de changer mon Character Encoding ? Pour le moment le blog est reconnu comme
iso-8859-1 Western-Europe, et ça me paraît limité, si chaque région doit avoir son encodage ...Alors,UTF-8, UTF-16 ?
Pour remplacer les caractères accentués par des entités (ce qui me parâit être le plus simple), je pensais utiliser PHP, comme ceci par exemple :
$texte = str_replace("é", "é", "$texte");Cela interviendrait lorsque je poste ou édite un billet, et à l'envers lorsque je lis un billet depuis l'interface Dotclear. En clair, dans MySQL j'aurais les posts encodés avec les entités, et pour les voir de façon lisible dans l'interface, j'inverse le processus. Et ça évite d'avoir à tout transformer à chaque affichage d'une page hors page d'admin, c'est à dire tout.
L'inconvénient de l'iso-8859-1 est double : - il ne connait pas certains caractères du français comme la ligature oe ou l'euro. - les navigateurs ont complètement torché cet encodage en le considérant comme du windows-1252. J'ai d'ailleurs évoqué le soucis dans bugzilla, mais Mozilla n'est pas le seul à faire ça (la faute à IE à la base).
Mes encodage préférés sont l'iso-8859-15 et l'UTF-8. L'avantage est que ces normes sont respectées correctement par les navigateurs. L'UTF-8 est pratique car il résout tous les problèmes d'encodage : tous les caractères imaginables sont codés d'une seule façon, tu n'as pas à t'embêter à gérer des entités ou des références numériques.
L'iso-8859-15 est intéressant car il ajoute des caractères manquant de l'iso-8859-1, et par rapport à l'UTF-8 il y a un gain de place quand on a du texte dans une langue occidentale comme le français, car les caractères accentués ne prennent qu'un octet, alors qu'en UTF-8 ils en prennent deux.
Utiliser des entités pour d'autres caractères que les caractères interdits du xhtml ( ceux inférieurs à 32, le & le < et le >) me parait inutile. Pire, ça alourdit ta page. Juste un coup de htmlspecialchars soit lors du stockage dans la base de données, soit à l'affichage, devrait suffire.
Normalement, si ton contenu est uniquement géré à l'aide de pages html via des formulaires, indiquer de l'UTF-8 pour le codage devrait être transparent, le navigateur se chargeant de faire les conversions pour toi. Attention, les vieux contenus devront être convertis en UTF-8 et les templates aussi devront utiliser ce codage. Ce n'est pas évident de changer de charset en cours de route :/
Bon, j'ai modifié mon
Content-Type, je suis maintenant enContent-Type: text/html; charset=ISO-8859-15.D'ailleurs, le XML ça me crée des erreurs quand je l'utilise avec Mozilla. C'est pour ça que je communique toujours en text/html.
Conformément à tes conseils, je suis passé en
iso-8859-15, et j'ai revalidé mes archives, les URLs contenant des & ont désormais des & à la place, et l'euro est désormais representé par son entité (€), au lieu de son raccourci clavier (ALT GR + E).Tout est dont valide XHTML 1.0, CSS 2 et conformes à l'encodage
iso-8859-15.Merci pour ton aide. ;) (et le WiKi c'est bien, utilisez-le)
Autre chose : mais si un caractère accentué n'est pas codé sous forme d'entité, comment le validateur le voit ?
Il est quand même valide ?
J'ai pas trop compris ce que tu as voulu dire ... La question est : en UTF-8, peut-on coder un accent sous une autre forme qu'une entité ?
Le validateur décode le contenu du document en fonction de l'encodage qui lui est spécifié (soit dans le header http, soit dans le header XML, soit dans la balise meta du document). Tu pourras donc valider ton document normalement.
Voici un exemple de trois types d'encodage différents (j'écris en hexadécmal) :
Format humain : a齤
windows-1252 : 61 E9 9C 80
iso-8859-15 : 61 E9 BD A4
UTF-8 : 61 C3 A9 C5 93 E2 82 AC
Dans un formulaire, le navigateur fait automatiquement la conversion. Tu peux donc écrire le symbole euro à l'aide de la combinaison AltGr+E par exemple, il sera transformé :
- en 80 en windows-1252
- en A4 en iso-8859-15
- en E2 82 AC en UTF-8
- en référence numérique sur caractère (NCR) si l'euro n'existe pas dans l'encodage choisi.
Concernant les éditeurs de texte, il faut prendre garde à se mettre dans le bon format. Par exemple j'utilise EditPlus. Pour charger dans le bon format, j'ouvre mon document, ensuite je choisis « Reload As... » dans le menu « Document », et je choisis le format que je veux.
Conclusion : pas besoin d'entité ou de NCR ! :) Sauf pour les caractères non présents dans ton charset, par exemple les lettres grecques en iso-8859-15 et les caractères interdits.
Bon, on va dire que l'
iso-8859-15ça permet une compatibilité suffisante.Ca commence à devenir obscur pour moi. Et si y'a rien à gagner à changer en UTF-8, pourquoi le ferais-je ?
(la solution de la flemmardise, mais bon, mon site est déjà beaucoup plus proche des standards que la moyenne, ça me suffit)
J'ai regardé l'encodage du StandBlog, de Sam et de greut histoire d'avoir un idée.
Et ils sont tous les 3 en
iso-8859-1, et ce sont tous les 3 des références pour moi. Comme quoi je n'étais pas vraiment has been.Il y a un seul fou en
iso-8859-15, et bien maintenant nous sommes 2 pas commes les autres. :)Merci pour toutes ces informations, et le temps que tu y as accordé.
Pour la peine, je risque de bientôt poster un clip de Momusu, si la LEN ne me met pas en péril parce que je poste un contenu pas trés légal ...
Finalement, peut-être que je retesterais le
UTF-8...Affaire à suivre. :)
Je pense que l'iso-8859-1 c'est ce que l'on met par défaut quand on n'a pas trop exploré le sujet sur l'encodage de document :)
Pour l'iso-8859-15 y'a aussi mon confrère Anubis : http://www.genezys.net/
Il y a Pascal aussi, connu pour sa FAQ sur Mozilla : http://pascal.chevrel.free.fr/carnet/
mat de totalement-cretin : http://totalementcretin.apinc.org
:)
Et sinon, vi vi, des nouveaux clips ! Je prends ! :D
Humpf
Nop, en fait tout le monde est passé à un autre sujet, à savoir le commentaire de Nicolas Krebs.
J'espère qu'Olivier/Neokraft aura quand même lu ma suggestion :p