Forum CMS Made Simple FR

Version complète : [RESOLU] Un carctère étrange et étranger
Vous consultez actuellement la version basse qualité d’un document. Voir la version complète avec le bon formatage.
Bonjour,

Sur un site j'utilise un bloc de contenu pour construire le header des pages.
Ce bloc appel le menu.
Lorsque je suis sur la page d'accueil du site j'ai ce caractère : "·" qui ce met sur le chevron ouvrant de la première balise html du menu.

J'ai regardé dans les fichiers de cache et dans la base de données si je trouvais ce caractère, mais rien.
Il n'existe pas dans mon code.... Je sais même pas ce que c'est comme caractère.

Mon problème est que ce caractère déplace le menu est me fait sauter ma mise en page.

Je met les appels aux différents blocs :

1 - Appel au bloc de contenu global dans le gabarit de ma page pour construire le header
Code :
[== HTML ==]
<div id="contenant">{global_content name='header'}
        <div class="bloc_centre">
            <div class="bloc_titre">......

2 - Appel le menu dans le bloc de contenu global
Code :
[== HTML ==]
<div class="liens_header">{menu start_level=2}</div>
</div>

3 - Début du gabarit menu
Code :
[== HTML ==]
<div id="menuwrapper">
{if $count > 0}.....

Donc ce caractère ce place tous seul sur le chevron ouvrant de la balise div qui pour classe menuwrapper......

Si vous avez une idée.

Cordialement

bobjo
Salut, merci de donner les informations demandées et surtout un lien vers la page du problème.
Bonjour Jean,

Merci de prendre du temps.

Quelle sont les informations demandées ? Si ce sont les infos de cmsms elles ne m'ont pas été demandées à l'ouverture du topic.

Pour un lien vers le site voila : http://www.machines-outils-vamo.com

Cordialement

bobjo
Bizarre !
Je ne vois pas ton caractère sur la page d'accueil (Firefox et chrome).
Le code source de la page m'indique que ton gabarit de menu est farci d'espaces impromptues.
Passe-le dans notepad et nettoie-le, il y a peut-être un caractère caché.
Oui ce caractère n'apparait pas sur le site.

Pour le voir il faut afficher le code source de la page.
Le copier et le coller dans notepade++ dans fichier de type html je met la ligne à la quelle on trouve ce caractère dans la code source : ligne 154.

J'ai passé ce caractère dans la fonction htmlentities et htmlspecialchars les deux m'ont sortie : ·

Je vais voir si je trouve à quoi ça correspond.

Merci encore

Cordialement

bobjo
Je pense que tu as encodé le gabarit de menu avec UTF au lieu d'utiliser UTF8 (sans Bom) dans ton notepad.
Le caractère est 
Et je pense également que tu devrais repasser TOUS tes gabarits en UTF8 sans bom sinon ton site risque d'être en mode quirks (adieu IE anciennes versions), on ne sait jamais.

Ce serait également bien que tu rajoutes la ligne de copyright du cms sur le site de ta société.
Bonjour,

Merci encore Jean de prendre du temps pour me répondre.

J'ai suivi vos conseils. J'ai passé tous mes gabarits en UTF-8.
Mais cela ne change rien au problème... Le caractère est toujours là.

J'ai passé les gabarits sur une version en local.
Le caractère est toujours présent. Donc cela viens bien des gabarits.

J'ai modifié le contenu de mon gabarit de menu en ne mettant que : "<!-- -->".
Le caractère est toujours là.

J'ai appelé un autre gabarit de menu (un gabarit présent à l'installation).
Pareil...

J'ai également modifié l'appel du gabarit de ma page en prenant un également présent à l'installation
Pareil, le caractère est toujours là.

Donc après tous ces tests cela me laisse penser que :
1 - Le problème viens des gabarits du menu.
2 - Quelle que soit le contenu des gabarits du menu ce caractère apparait.

Si vous avez une idée

Cordialement

bobjo
Il faut utiliser UTF8 sans bom et pas UTF8 tout court.
Je reste à penser que tu as passé ton gabarit de menu dans notepad++ avec l'encodage UTF8, ce qui place ce caractère tout en haut du code.
Maintenant, c'est peut-être un bug du cms, il nous faut donc connaître ta version du cms et du menumanager pour pouvoir vérifier chez nous.
Bin voilà, le caractère a disparu Smile
Sans doute le cache du navigateur qui gardait ce caractère en mémoire.
Le caractère n'a pas disparu.
J'ai vidé le cache du navigateur et de cmsms et le caractère est toujours là.

Lorsque j'ai passé mes gabarits en UTF-8 c'est sans bom.

Je veux bien croire que le gabarit est encodé en autre chose que UTF-8 sans bom, mais j'ai créé un gabarit de menu vide que j'ai placé directement dans le dossier templates du module menuManager.
Ce gabarit de menu vide est appelé dans un nouveau gabarit de page qui n'a pas été modifié.
Le caractère est toujours présent.

La version de cms :
en ligne : 1.11.10
en local : 1.11.9

la version de MenuManager :
en ligne : 1.8.6
en local : 1.8.6

Cordialement

bobjo
ligne 154 sous FF et chrome, je n'ai plus le caractère incongru avant <div id="menuwrapper">.
preuve : http://www.tutos-pour-cmsmadesimple.be/u...um/bom.png
Je le voyais avant-midi. Es-tu certain d'avoir bien vidé le cache du navigateur : Ctrl+shift+del ?
Par contre le code du menu est toujours bien crade Wink
Et n'oublie pas que tout fichier, créé sous notepad++ en UTF8 (avec bom), même vide aura ce caractère en première ligne.
Oui j'ai bien vidé le cache (ctrl+shift+del ou historique>supprimer l'historique récent).
Je viens de le refaire pour être sur, j'ai toujours le caractère.

J'ai fais un autre test en local, je met le code :

gabarit de ma page :
Code :
[== Indéfini ==]
{process_pagedata}{menu template="menu_header.tpl"}{content}

gabarit menu_header.tpl : vide

contenu de ma page (lorem ipsum) :
Code :
[== HTML ==]
<p>In faucibus dolor eu velit lacinia ultricies. Praesent varius in nunc eget rhoncus. Ut posuere, tellus id pretium venenatis, eros enim blandit purus, eu euismod diam sapien ac augue. Duis consectetur sagittis nunc ut venenatis. Phasellus lectus sapien, bibendum et turpis sed, tempor ornare eros. Maecenas eu lectus tristique, tincidunt odio quis, congue dui. Integer diam augue, congue ut egestas in, aliquet a justo. Integer tristique nisi eros, quis placerat dolor feugiat id. Etiam vel posuere dui. Donec rutrum magna leo, vehicula suscipit enim vestibulum porttitor. Etiam vitae pulvinar ipsum, id viverra sapien. Suspendisse pellentesque sodales metus. Morbi accumsan vitae lorem sit amet imperdiet. Integer eget libero iaculis, faucibus ante nec, euismod mi. Integer dolor est, pharetra et felis ut, blandit ultrices lectus. Ut imperdiet ac mauris vel euismod.</p>
<p>Morbi a neque pellentesque, auctor nibh eget, tempus dolor. Fusce posuere risus ac justo tincidunt, id ultrices purus porttitor. Nulla quis dapibus nisi, eu porttitor purus. Nullam at fringilla sem. Mauris et ante sit amet elit facilisis scelerisque. Nullam accumsan nec tortor at euismod. Aliquam ut purus ultrices, facilisis dolor a, aliquet elit. Quisque enim orci, elementum ac condimentum a, hendrerit vel ligula. Nullam feugiat, velit eget iaculis auctor, tellus leo sagittis mauris, vitae commodo nisl lectus eu neque. Vivamus et volutpat nulla. Pellentesque imperdiet, massa non tristique auctor, sem urna mollis purus, non sodales leo orci a justo. Sed a ornare velit. Donec aliquam ornare dolor, vitae aliquam nibh. Pellentesque mattis lacus nec quam pulvinar commodo.</p>
<!-- Add code here that should appear in the content block of all new pages -->

Lorsque je fais ce test le caractère n'est plus là !

Mais si je change le gabarit de ma page en :
Code :
[== Indéfini ==]
{process_pagedata}<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">{menu template="menu_header.tpl"}{content}
Le caractère revien sur le premier chevron du contenu de ma page.
Il vient lorsque tu écris la doctype ?
Et le caractère se met où ? avant <doctype ou avant la première balise du menu ou celle délimitant le content ?
Non pas uniquement lorsque j'écris le doctype, j'ai l'impression qu'il apparait quand je met du code entre {process_pagedata} et {menu template="menu_header.tpl"}.

Le caractère ce met sur le premier chevron de la balise p de mon contenu. Mais il se met là car le gabarit de mon menu est vide.

Je met le résultat :
Code :
[== Indéfini ==]
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer suscipit ornare faucibus. Vivamus lectus lacus, tincidunt nec facilisis a, vehicula ut nisi. Duis laoreet justo eget metus fermentum molestie. Sed eu orci dui. Morbi nec mi orci. Sed quis leo rutrum, dapibus urna et, interdum magna. Nullam pharetra augue et facilisis dictum.</p>
<p>In faucibus dolor eu velit lacinia ultricies. Praesent varius in nunc eget rhoncus. Ut posuere, tellus id pretium venenatis, eros enim blandit purus, eu euismod diam sapien ac augue. Duis consectetur sagittis nunc ut venenatis. Phasellus lectus sapien, bibendum et turpis sed, tempor ornare eros. Maecenas eu lectus tristique, tincidunt odio quis, congue dui. Integer diam augue, congue ut egestas in, aliquet a justo. Integer tristique nisi eros, quis placerat dolor feugiat id. Etiam vel posuere dui. Donec rutrum magna leo, vehicula suscipit enim vestibulum porttitor. Etiam vitae pulvinar ipsum, id viverra sapien. Suspendisse pellentesque sodales metus. Morbi accumsan vitae lorem sit amet imperdiet. Integer eget libero iaculis, faucibus ante nec, euismod mi. Integer dolor est, pharetra et felis ut, blandit ultrices lectus. Ut imperdiet ac mauris vel euismod.</p>
<p>Morbi a neque pellentesque, auctor nibh eget, tempus dolor. Fusce posuere risus ac justo tincidunt, id ultrices purus porttitor. Nulla quis dapibus nisi, eu porttitor purus. Nullam at fringilla sem. Mauris et ante sit amet elit facilisis scelerisque. Nullam accumsan nec tortor at euismod. Aliquam ut purus ultrices, facilisis dolor a, aliquet elit. Quisque enim orci, elementum ac condimentum a, hendrerit vel ligula. Nullam feugiat, velit eget iaculis auctor, tellus leo sagittis mauris, vitae commodo nisl lectus eu neque. Vivamus et volutpat nulla. Pellentesque imperdiet, massa non tristique auctor, sem urna mollis purus, non sodales leo orci a justo. Sed a ornare velit. Donec aliquam ornare dolor, vitae aliquam nibh. Pellentesque mattis lacus nec quam pulvinar commodo.</p>
<!-- Add code here that should appear in the content block of all new pages -->

Alors évidement le caractère n'apparet pas dans le code que j'ai mis. Mais il se trouve après la fermeture du doctype sur le chevron ouvrant de la balise p.

Cordialement

bobjo
Essaye en testant sans la balise {menu} ; s'il n'apparaît pas, il provient forcément de {menu}
Crée un gabarit menu non vide dans le bloc-notes au lieu de notepad.

Je viens de revérifier et il n'apparaît plus sur la page d'accueil du site sous FF et chrome, mais bien sur IE... qui est d'ailleurs en mode quirks (ou edge)(Le menu est décalé vers le haut).

Et ce phénomène n'apparaît pas dans mes tests mêmes versions.
Sans la balise {menu} le caractère disparait. Donc oui le problème semble bien venir de là.

Si je crée un gabarit de menu non vide dans le bloc-notes (fichier en UTF-8) le caractère est là.
Puis dans notepad++, je passe ce fichier en UTF-8 sans bom, ça change rien.

J'ai encore une fois vérifié sous FF (après avoir encore une fois vidé le cache), j'ai toujours le caractère ligne 154 sur le chevron ouvrant de la div classe menuwrapper.

Cordialement

bobjo
Je passe, désolé de n'avoir pu t'aider.
Tiens-nous au courant.
J'espère que d'autres auront une idée.
Citation :Si je crée un gabarit de menu non vide dans le bloc-notes

créer ton gabarit directement dans le CMS et NON dans un éditeur de texte
J'ai déjà essayé de créé le gabarit dans le cms.
C'est pareil...
J'ai remarqué un truc,

Si dans mon gabarit de page je ça :
{process_pagedata}{menu template="test"}{content}
avec comme contenu du gabarit de menu une div le caractère disparait.

Si j'inverse content et menu donc :
{process_pagedata}{content}{menu template="test"}
Le caractère apparait.
Comme si le fait d'avoir une balise avant était obligatoire pour faire apparaitre ce caractère.
Comme si il était coupé en deux. La fin serait dans la partie menu (mais je sais pas ou) et le début serait créé par n'importe quelle balise fermante.
Bon apparemment, cela viens d'un problème au niveau de php qui à du mal avec UTF-8 lorsqu'il y a des include de fichiers php dans des fichiers php.

J'ai trouvé des infos ici, , et .

De tous c'est liens il me semble qu'il y a une piste intéressante qui consiste à supprimer le caractère avec du javascript.

Jean et JCE merci encore de prendre du temps pour mon problème.
Je vous laisse le soin de communiquer les informations concernant le php si vous jugez cela nécessaire.

Cordialement

bobjo
C'était donc bien un problème de BOM.
Par contre, je ne vois pas ce bug mentionné chez php, seulement ceci, qui voudrait que php ne lise pas le bom s'il existe : https://bugs.php.net/bug.php?id=22108
Je suppose que tu as vérifié tes fichiers include pour voir s'ils ne le contenaient pas.
C'est bon !!! Smile
J'ai trouvé une solution avec javascript en supprimant le caractère.

Je met le code (ça peut servir !)
Code :
[== JavaScript ==]
$( document ).ready(function() {

//On récupère les enfants de l'élément qui contient le caractère à supprimer
//Et on le met dans une variable
var myString = $("[b]element qui contient le caractère[/b]").html();

//Dans la variable on cherche et on remplace le caractère par rien
myString = myString.replace(String.fromCharCode(65279), "" );

//On retourne les enfants de l'élément, sans le caractère, dans l'élément
$("[b]element qui contient le caractère[/b]").html(myString);
});

Voilà !!!

Cordialement

bobjo