2

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

$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 个答案是正确的。

4

4 回答 4

2

您真的查看了浏览器的源代码视图吗?<? ?>部分往往被解释为标签。

如果您不在eval()任何地方使用,PHP 将无法实际解释这些标签。

也许 Suhosin 会过滤掉这些,但这会让我感到惊讶。您可以通过使用来解决它

&lt; &gt;

反而。

于 2010-06-19T08:25:49.577 回答
1

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

$search = array('<', '>', '--');
$replace = array('&lt;', '&gt;', '?');
$text = 'Hello <--name--> !!';
echo str_replace($search,$replace,$text);
于 2010-06-19T08:36:54.343 回答
1

和苏豪没有任何关系。

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

检查页面来源。

于 2010-06-19T08:29:12.550 回答
0

你也可以使用 htmlspecialchars,像这样:

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

htmlspecialchars 将替换:

  • & 与 &
  • “与”
  • < 与 <
  • 与 >

如果您出于某种原因不想替换 " 是可能的(请参阅http://se2.php.net/manual/en/function.htmlspecialchars.php)。不过,&、< 和 >据我所知,当您使用 htmlspecialchars 时,总是替换为&amp;, 。&lt;&gt;

于 2010-09-22T21:34:19.013 回答