我正在尝试替换类似的东西:

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

预期的:

Hello <?name?> !!

结果:

Hello !!

(我正在检查源代码,并且启用了短开放标签)

我尝试了很多方法,但似乎永远无法得到任何结果 <? (或者 <?php) 细绳。我认为这可能与Ubuntu默认启用的Suhosin补丁有关。在做其他事情之前,有人知道如何让它发挥作用吗?

谢谢。

更新:

我直接在命令行中尝试并且有效。是的,问题是 php 标签之间的任何内容都不会显示在浏览器(Chrome)中,甚至在源代码中也不会显示。

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

在 Chrome 中查看源代码时会显示“A B”。但 Firefox 显示完整...总而言之,Chrome 欺骗了我;)

谢谢你!!!

抱歉,我必须选择最佳答案...但对我来说,第 3 个答案是正确的。

有帮助吗?

解决方案

您是否真的看过浏览器的源视图? <? ?> 部分往往被解释为标签。

如果您不使用 eval() 在任何地方,这些标签都不会由PHP真正解释。

也许Suhosin会过滤出来,但这会让我感到惊讶。您可能可以通过使用

&lt; &gt;

反而。

其他提示

这与Suhosin无关。

<?name?> !! 当在HTML页面中显示时会导致 !!

检查页面源。

我同意 Pekka 和 Mike(另一个 Mike,不是我 Mike)的观点 - 你确实需要检查 HTML 源代码,因为它会正确显示。如果您确实想在输出中看到小于和大于符号,则需要将它们替换为 HTML 实体(如 Pekka 的建议):

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

您也可以使用htmlspecialchars,这样:

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

htmlspecialchars将替换:

  • & 和 &
  • “ 和 ”
  • <with <
  • 与>

如果您不想替换“出于某种原因或另一个原因,则可能(请参阅 http://se2.php.net/manual/en/function.htmlspecialchars.php)。 &,<和>,据我所知, &amp;, &lt;&gt; 当您使用htmlspecialchars时。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top