Caractère bizarre généré par PHP

Dark Templar

Ex-vénérable sage
Club iGen
24 Avril 2002
16 898
1 044
Toujours là
www.pontida.fr
Mes pages web sont ainsi faites : j'appelle un fichier PHP (avec require) qui lui-même appelle tous les fichiers PHP nécessaires au bon fonctionnement de la page, à savoir une fonction qui génère les en-têtes, un fonction qui vérifie ce qui peut être affiché en fonction de l'identité du visiteur?
Le problème, c'est que pour chaque "require" dans ces fichiers, j'ai un caractère bizarre (rien sous Safari ou Camino, un point selon le validateur W3C, un point d'interrogation qui s'affiche en haut de la page sous IE?) qui s'intègre à l'endroit de cette fonction require (c'est à dire au tout début du code source, avant le Doctype).
ainsi, si j'appelle un fichier qui lui même en appelle deux autres, j'aurais droits à 3 de ces caractères bizarres au début de ma page (ici pris pour IE) :
Bloc de code:
???<?xml version="1.0" encoding="utf-8"?>

J'utilise PHP 4.3.4, mes pages sont en utf-8 (que ce soit de l'HTML ou du XHTML ne change rien).

Est-ce que vous savez d'où ça peut venir ?
 
  • J’aime
Réactions: Finn_Atlas
Le problème de ton code c'est qu'après le \"utf-8\" du as ?> qui est interprété comme la fin du code PHP.
Avant j'utilisais echo '<?xml version=\"1.0\" encoding=\"utf-8\"?'.'>'; et maintenant comme j'ai tout une fonction j'utilise
Bloc de code:
echo <<<debutPage
<?xml version="1.0" encoding="utf-8"?> (et d'autres trucs)
<<<debutPage

Mais mais je ne pense pas que ça ait un rapport avec mon problème car j'ai un caractère de plus à chaque "require" (ou include, ça change rien).
Pour info, pour require j'utilise le code suivant :
Bloc de code:
require ("chemin/page.php");
 
Si tu arrivais à nous fournir un exemple fonctionnel très simplifié de ton problème, ça pourrait peut-être nous aider ?!

Mis à part ça, à la place d'utiliser un "echo <<<debutPage .... ", si tu faisais plus ou moins comme a suggéré fissunix pour le <?xml... ?>, ça foire toujours ?
 
Ca revient au même en utilisant echo ou print + la formule.
Je répète que ça ne vient pas du début de ce qui est après echo mais du fait que j'appelle des fichiers PHP (enfin c'est ce que j'en conclue puisque à chaque fois que j'appelle un fichier de plus ça ma rajoute un caractère, si je centralise toutes les fonctions au début du fichier c'est impec).

Je vous filera une adresse pour voir ça Jeudi quand je pourrais me servir de mon ordi comme serveur (j'ai pas d'endroit ou le mettre à l'heure actuelle).
 
Bonjour,
J'ai quelques problèmes pour le moment avec mon accès Internet alors je ne vais pas pouvoir servir de serveur avant pas mal de temps.
J'ai créé une page dont vous pouvez voir ici le
Bloc de code:
<? echo '<?xml version="1.0" encoding="utf-8"?'.'>'; ?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
        "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr">
<head>
	<meta http-equiv="content-type" content="text/html; charset=utf-8" />
	<title>Page de test</title>
</head>
<body>
<?php require ("fichier.php"); ?>
</body>
</html>

Voici le contenu de fichier.php
Bloc de code:
<?php
echo "test";
?>

Sous Safari, Omniweb ou Camino, la page s'affiche sans problème (simplement le mot "test"), par contre sous IE j'ai un point d'interrogation et sous Opera le caractère qui signifie "caractère inconnu".
voici le code source affiché par Opera :
source_pb_php.jpg

Sous IE c'est pareil mais avec un simple point d'interrogation, et pour Safari, Omniweb et Camino le code source est normal.

Si je change l'encodage en ISO Latin 1 ça ne change rien sauf pour IE ou le point d'interrogation est remplacé "".

Voilà, le problème ne vient donc pas d'une balise mal fermée et se manifeste quelque soit l'emplacement de l'instruction require dans le fichier.
 
Ciao,

J'ai fait des "copier-coller" des ton codes sources pour tester... Donc, j'ai exactement la même syntaxe et j'obtiens un résultat (source + affichage) parfait avec IE (mac+windows) Safari & Firefox... Je ne peux malheureusemet pas te dire pourquoi ça fonctionne chez moi et pas chez toi! Essaie de mettre ça en ligne pour tester par toi-même...

Bonne soirée
 
Merci à Fissunix qui m'a permis de voir que le problème ne venait pas de mon serveur PHP. :)
En fait, il se trouve que j'utilisais bêtement du UTF-8 au lieu d'utiliser du UTF-8 no BOM alors que le validateur W3C m'avait encore répété il y a quelques jours que ça risquait de poser problème avec les anciens navigateurs.
Donc j'ai passé toutes mes pages en UTF-8 no BOM (ce qui ne change absolument rien au code d'ailleurs) et ça marche impec. :)
 
Intéressant!
Mais c'est quoi ce UTF-8 no BOM ?! Je n'en ai jamais entendu parler.
Au passage, peut-être que du UTF-16 aurait résolu ton problème ?
 
Ok merci pour le lien ! :up:

Pour le UTF-16, il n'est peut-être pas bien géré en effet, je n'ai jamais testé...
A ce propos, j'aimerais bien m'y mettre un peu. Tu utilises quel logiciel pour enregistrer tes pages web en Unicode ?
 
tatouille a dit:
après avoir suivi toutes ces conneries tu tournes avec une version inferieur à 4.3.4
donc tu es pile ds un bug référencé
Ha ben c'est ballot ça :D
Mais moi je suis en 4.3.4, pas en inférieur à 4.3.4, ça bugge aussi alors ?
De toute façon, là je mets plus à jour avant la 5.
 
Dark Templar a dit:
Ha ben c'est ballot ça :D
Mais moi je suis en 4.3.4, pas en inférieur à 4.3.4, ça bugge aussi alors ?
De toute façon, là je mets plus à jour avant la 5.

d'ou provient ton package from source ou someone ?

parce que cela est fixé en version 4.3.4 au niveau de mes sources