2010-01-31 6 views
4

Je rencontre une corruption de sortie très étrange sur l'un de mes sites PHP. Parfois, un morceau de code HTML est affiché, plutôt que les balises interprétées. Il semble que certains caractères manquent, ce qui gâche les tags. Voir l'exemple ci-dessous: la deuxième ligne devrait simplement être un lien vers c1, mais pour une raison quelconque, une partie de l'URL cible est affichée.Strange corruption de sortie PHP

alt text http://trappist.elis.ugent.be/~wheirman/atuin/tmp/phpstrangeness.png

Le problème est temporaire, un rafraîchissement résout habituellement. Cela peut arriver sur différentes parties de la page (bien que souvent au même endroit). Seul Safari semble affecté (mais je soupçonne que Firefox ne fait que masquer le problème en raison d'une analyse plus tolérante). Cela se produit aussi bien sur mon serveur de développement que sur le live, ils ont tous les deux des réglages légèrement différents (bufferisation de sortie, transfert segmenté), bien que la probabilité que cela se produise semble varier.

Quelqu'un a déjà vu quelque chose comme ça?

EDIT

Quand je "Afficher la source" dans Safari sur cette page, je reçois le code HTML suivant:

<tr class="odd"> 
    <td>73</td> 
    <td><a href="companies.php?view=1&amp;companyid=73&amp;return=%2Foffice%2Fcompanies.php">c1</a></td> 
    <td></td> 
    <td><img src='/images/dot_blue.png' class="altTooltip" alt="inactive: no account" /> </td> 

Je ne vois rien de mal à cela, donc soit Safari a rechargé la page quand je lui ai demandé la source, ou je ne regarde pas assez fort ...

+0

pourriez-vous publier un extrait de la page html défectueuse? – roman

+0

Pourriez-vous poster le code HTML qui provoque cela? Peut-être passer par un validateur et voir ce qui se passe. – Thomas

+0

Malheureusement, je n'ai pas été en mesure d'obtenir le code HTML défectueux. Quand je fais "Afficher la source" dans Safari, il semble que la page soit rechargée et l'erreur disparaisse ... – Wim

Répondre

1

J'ai finalement trouvé le problème (en utilisant Web Inspector): TinyMCE a inséré des balises (qu'il utilise pour charger les fichiers de langue et les modules d'extension) , à des endroits apparemment aléatoires à l'intérieur mon propre HTML. Le résultat était que, dans le cas visible de ma capture d'écran, quelque chose comme <a href="foo<script src="tinymce/lang/en.js">bar.php">foobar</a>. Puisque j'utilise aussi jQuery sur la même page, je suppose que c'était en fin de compte causé par les modifications de jQuery aux additions de DOM et de TinyMCE qui se sont déroulées en même temps, ce qui a provoqué une condition de course (causée par un bug). cela semble seulement s'exhiber dans Safari).

J'utilise maintenant la construction de jQuery TinyMCE, et tout a été bien depuis ...

Merci à tous pour l'aide!

2

Eh bien, voici ma photo dans le noir.

La coupure se produit dans le mot "bureau", après la combinaison de caractères fi. Je parie que le fi ligature est - en quelque sorte - causant des ennuis.

Comment exactement? Comme ce code HTML ne contient pas le caractère de ligature, cela peut être un bug dans Safari. Surtout depuis qu'il se produit au hasard. Pourriez-vous essayer de renommer ce fichier et voir si le problème disparaît? Un code HTML valide peut également aider à éviter ce problème, car il facilite l'analyse syntaxique.

+0

C'est une idée très intelligente, mais on dirait qu'elle fait partie d'une URL . Je peux difficilement imaginer qu'il y ait vraiment un «fi» là-dedans. –

+0

Sauf s'il s'agit d'un bogue et qu'une partie de l'analyseur le traite comme du texte visible. Alors un remplacement de fi -> fi pourrait avoir du sens. – Thomas

+0

Je pensais aussi à un bogue de rendu Safari. Le téléchargement et la comparaison du fichier des centaines de fois n'ont causé aucun changement, et il n'y avait rien de mal avec le contenu de la page quand je l'ai stocké sur le serveur. De plus, comme vous pouvez le voir sur la capture d'écran, les 3 icônes à droite sont les unes au-dessus des autres. Après un rafraîchissement, ils sont côte à côte. Dans IE et FF, je ne les ai jamais vus rendus verticalement. – Wim

1

Lorsque vous sélectionnez un élément HTML et une source d'affichage, ce que vous obtenez n'est pas 100% ce qui existe. Par exemple, vous tous & êtes &amp;, ce qui signifie probablement que vous avez sélectionné le texte incriminé et vu la source de la sélection. Si vous rencontrez toujours le problème, essayez d'afficher le code source entier sans rien sélectionner, puis utilisez ctrl + f pour trouver l'emplacement dans le code, et essayez de nous donner un échantillon plus grand, pas seulement la ligne incriminée , mais une rangée correcte, et dans un contexte plus large. Par exemple, lors de l'utilisation de tables, une erreurpeut avoir des conséquences très étranges, cela ne ressemble pas à ce type de problème, je dis simplement que nous avons besoin de contexte pour pouvoir aider.

Il y a aussi le problème que certains navigateurs, pour voir la source, soumettent de nouveau la page et en obtiennent une deuxième copie.J'ai le sentiment qu'il est le code qui est sortie le texte, alors regardez et voyez si vous utilisez quelque chose comme

<?= $someVar ?> 

et assurez-vous qu'il est pas comme ça:

<a href=<?= isset($x) ?'"'. $someVar.'"': '"'.$someOlderVar.'">'?>> xxx </a> 

Donc, pas selecty , et plus grand échantillon s'il vous plaît. Et nous aurions besoin de quelque chose du code qui génère le code HTML erroné ...

+0

"Par exemple, vous êtes tous &, ce qui signifie probablement que vous avez sélectionné le texte incriminé et que vous avez consulté la source de la sélection." Pourquoi cela signifie-t-il cela? Il est normal d'échapper les URL (y compris mettre &) lorsque vous les placez en HTML. –

+0

Vous vous méprenez, vous n'échappez pas aux entités HTML dans les URL, c'est-à-dire que l'esperluette est un symbole valide pour les URL, elle ne devrait pas être remplacée par la version html, vos URL se comporteront bizarrement. –

+0

@jolierouge: Sauf que vous l'évitez en le mettant dans un document HTML. '' est invalide car il n'y a pas de companyid et de retour d'entités HTML. – Powerlord