Question

Je suis en train de remplacer quelque chose comme:

$text = "Hello <--name--> !!";
echo str_replace("--","?",$text);

attendu:

Hello <?name?> !!

Résultat:

Hello !!

(Je vérifie le code source, et je balises courtes ouvertes activés)

J'ai essayé tant de façons, mais il semble que je ne peux jamais comme résultat une chaîne <? (ou <?php). Je pense qu'il peut être lié à rustine Suhosin qui est activé par défaut dans Ubuntu. Avant de faire quoi que ce soit d'autre, quelqu'un ne sait comment obtenir que le travail?

Merci.

Mise à jour:

J'ai essayé directement en ligne de commande et cela a fonctionné. Oui, le problème était que tout entre les balises php n'est pas affiché dans le navigateur (Chrome), même pas dans le code source.

echo "A <"."?"."php"." echo 1 "." ?".">"." B";

Chrome affiche "A B" quand on regarde le code source. Mais Firefox l'affiche complet ... Donc, en résumé Chrome me duper;)

Merci !!!

Désolé je devais choisir la meilleure réponse ... mais pour moi la 3 réponse était correcte.

Était-ce utile?

La solution

Avez-vous vraiment regarder dans la vue source du navigateur? sections <? ?> ont tendance à être interprétés comme des balises.

Si vous ne l'utilisez partout de eval(), il n'y a aucun moyen de ces balises seront interprétées en fait par PHP.

Peut-être que les filtres Suhosin ceux sur mais cela me surprendrait. Vous pourriez être en mesure de se déplacer en utilisant

&lt; &gt;

au lieu.

Autres conseils

Il n'a rien à voir avec Suhosin.

<?name?> !! lorsqu'elle est affichée dans une page de résultats HTML dans !!

Vérifiez la page source.

Je suis d'accord avec Pekka et Mike (l'autre Mike, pas moi Mike) - vous avez vraiment besoin de vérifier le code source HTML, comme il affichera correctement. Si vous voulez vraiment voir moins-que et symboles supérieur à la sortie, vous devez remplacer ceux avec des entités HTML (comme suggéré par Pekka):

$search = array('<', '>', '--');
$replace = array('&lt;', '&gt;', '?');
$text = 'Hello <--name--> !!';
echo str_replace($search,$replace,$text);

You could also use htmlspecialchars, like this:

$text = htmlspecialchars("Hello <--name--> !!");
echo str_replace("--","?",$text); // Hello &lt;?name?&gt; !!

htmlspecialchars will replace:

  • & with &amp;
  • " with &quot;
  • < with &lt;
  • with &gt;

If you don't want to replace " for some reason or another it's possible (see http://se2.php.net/manual/en/function.htmlspecialchars.php). &, < and >, though, is as far as I know always replaced with &amp;, &lt; and &gt; when you use htmlspecialchars.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top