OpenEdition / lodel

Science publishing CMS
GNU General Public License v2.0
50 stars 27 forks source link

Pb caractères accentués dans templates #114

Closed ssonnet closed 4 years ago

ssonnet commented 4 years ago

Bonjour,

Je suis parti des templates fournis avec Lodel pour concevoir l'interface de nos revues. Un certain nombre de ces templates commencent par la balise <CONTENT VERSION="1.0" LANG="fr" CHARSET="utf-8"/>. Celle-ci étant obsolète et le charset utf-8 étant déjà paramétré via une balise meta dans l'en-tête html, je l'ai retirée. Sauf qu'en faisant ça plus aucun caractère accentué statique dans les templates ne s'affiche correctement. Mes fichiers templates semblent bien en utf-8 (vérifié avec un file -i). Quand je fais une page html ou php toute simple hors installation Lodel et affichant "aéèuà", tout se passe bien, donc je ne pense pas avoir de problème de config serveur. Voyez vous une explication qui pourrait être liée à Lodel ?

Cordialement. Sylvain Sonnet

jfriviere commented 4 years ago

Bonjour,
Vous dites :

Un certain nombre de ces templates commencent par la balise .

Mais il n'y a pas la balise. Pouvez-vous l'indiquer en utilisant les "quotes" qui permettent l'affichage du code dans le ticket ? JFR

brrd commented 4 years ago

Je fais remonter ici cette version desdits templates ou l'encodage a été corrigé : https://github.com/edinum/lodel-default-template

Avec notamment ces deux commits qui pourront vous intéresser @ssonnet :

Sinon pour une nouvelle maquette en HTML5, libre, responsive et customisable, nous avons diffusé la Nova au début de l'année (en collaboration avec l'Université Jean Moulin Lyon 3) : https://github.com/edinum/nova

ssonnet commented 4 years ago

Bonjour, Vous dites :

Un certain nombre de ces templates commencent par la balise .

Mais il n'y a pas la balise. Pouvez-vous l'indiquer en utilisant les "quotes" qui permettent l'affichage du code dans le ticket ? JFR

Excusez moi, je n'avais pas fait attention, j'ai mis à jour le message il s'agit de la balise <CONTENT VERSION="1.0" LANG="fr" CHARSET="utf-8"/>

jfriviere commented 4 years ago

Je ne sais pas exactement comment cette balise est utilisée par Lodel, mais elle l'est, manifestement. Donc, je vous recommande de la laisser dans la template. Elle n'apparaitra pas dans la page html générée à partir du template.

Sinon @brrd a donné un lien vers une version du template de base (qui date de presque avant UTF-8...) dans laquelle les caractères accentués mal encodés sont corrigés. JFR

ssonnet commented 4 years ago

Merci @brrd mais j'avais pris soin de convertir les templates en utf8 en début de projet (car par défaut beaucoup étaient en ISO_8859-1) et de vérifier les caractères accentués dans le code source. Par contre, autant pour moi je n'avais pas compris que <CONTENT> était une balise propre à Lodel. Du coup en cherchant dans le code j'ai trouvé l'explication à mon problème dans le script parser.php :

case 'CONTENT' : $attrs = $this->_decode_attributs($this->arr[$this->ind + 1]); $this->charset = isset($attrs['CHARSET']) ? $attrs['CHARSET'] : "utf-8";

if ($this->charset != 'utf-8') { #$t=microtime(); function_exists('convertHTMLtoUTF8') || include 'utf8.php'; // conversion des caracteres $template['contents'] = utf8_encode($template['contents']); convertHTMLtoUTF8($template['contents']); }

Tout ça fait que s'il n'y a pas au minimum la balise <CONTENT> dans le template, alors Lodel convertit le contenu en uft8. Or si le contenu est déjà en utf8 (ce qui est mon cas), la fonction utf8_encode() produit l'effet inverse de celui escompté : on se retrouve avec des mauvais caractères accentués (https://www.php.net/manual/fr/function.utf8-encode.php).

Par contre si vous pouvez me dire à quoi servent les attributs VERSION et LANG, je suis preneur :)