2017-04-11 10 views
0

Choses plus étranges ... difficile de faire cette "question". J'ai un site web complet en php et JavaScrip. Les contenus sont traités de plusieurs façons, en accédant à mySQL et aux fichiers. Une façon est juste d'inclure un php qui construit la chaîne html. Pour inclure le droit dans la structure du site, je l'ai fait d'un simple tampon de sortie:Tampon de sortie PHP corrompu pour inclure le contenu

ob_start(); 
include_once($url); 
$output = ob_get_contents(); 
ob_end_clean(); 
echo_cont($output); 

Où echo_cont simplement stocker le contenu à imprimer plus tard, au bon endroit. Mais une page "simple" qui lit des fichiers photo et construit un album est corrompue. Des parties de HTML manquants, des changements étranges comme celui-ci:

  • class = » Bouton2" quand devrait être class = "button2" si l'élément devient non formaté
  • "http www.mywebsite.com.br dossier" lorsque il suppose être "http // www.mywebsite.com.br/dossier" ...

D'autres pages sont incluses à droite. J'ai commencé à utiliser tampon de sortie dans ce site cette année, je ne sais pas si peut être un problème de ce genre ou peut-être quelque chose d'autre, mais il n'est pas facile de chercher des indices, n'est pas facile à exécuter le page en dehors du site, car elle dépend de plusieurs bibliothèques - est assez complexe. Il me semble un texte encodé et mal décodé plus tard. Qu'est-ce que tu penses?

EDIT: la fonction echo_cont:

$htmlConteudo = ''; 
function echo_cont($html){ 
    global $htmlConteudo; 
    $htmlConteudo .= $html; 
} 
+0

avez-vous fait un var dump de $ output pour vérifier que votre fonction echo_cont() n'affecte pas la sortie – bumperbox

+0

Assurez-vous que tous les fichiers que vous incluez utilisent le même encodage, de préférence UTF-8. Si vous mélangez les encodages, cela peut arriver. Essayez d'ouvrir l'un des fichiers source erronés dans un éditeur et assurez-vous qu'il est enregistré en tant que UTF-8. –

+0

Je sais qu'il est difficile de faire une question qui montre vraiment votre problème, mais nous ne pouvons pas vous aider si nous n'avons même pas un changement pour reproduire le problème que vous semblez avoir. Voir: https://stackoverflow.com/help/mcve Une façon d'aborder ce problème est étape par étape.D'abord echo (ou mail) le bit de code avant de le stocker avec echo_cont() ', est ce code encore ok? Faites ensuite la même chose lorsque vous le récupérez. Mon point est, il doit aller mal quelque part, juste traquer où. –

Répondre

0

j'ai décidé de répondre à ma propre question avec les idées de contributeurs parce que le problème ne concerne pas la fonction php, mais la façon dont j'enquêtait - et peut se produit avec vous lisez ma réponse.

Le problème est: l'image affichée dans le navigateur est une interprétation des données envoyées, comme les informations affichées dans la fenêtre du développeur. Ce ne sont pas les données d'origine, c'est une tentative de faire un document xml/html à partir de données. Dans ce cas, les données d'origine doivent être considérés, au préalable de l'interprétation du navigateur, et il peut être avec cette fonction simple:

function strTag($xmlstr){ 
    $str = str_replace('<', '&lt;', $xmlstr); 
    $str = str_replace('>', '&gt;', $str); 
    $str = str_replace(' ', '&nbsp;', $str); 
    return nl2br($str); 
} 

Than, les données sont capturées:

ob_start(); 
include("www_pc/conteudo_imagens.php"); 
$output = ob_get_contents(); 
ob_clean(); 
echo(strTag($output)); 

Maintenant, il est le temps de se rapprocher de l'écran et d'examiner tous les détails. Dans mon cas, il y avait quelques balises comme ceci:

<div style="float:left;width:80px;height:120px;margin:0px 5px 5px 0px;> 

Vous pouvez voir la citation manquante à la fin de la déclaration de style (il arrive de codage fin de la nuit). Donc, lorsque le navigateur tente de reconstruire le fichier XML et de faire sa propre interprétation, confusion de l'analyse lorsque vous essayez de trouver l'erreur. Je testerais dans Safari et Firefox, donc ce n'est pas l'échec du navigateur, mais la limitation de l'IA du navigateur. Je dois voir le code original, AI seulement dans les films!