【问题标题】:PHP str_replace/preg_replace problem with php open tagsphp打开标签的PHP str_replace/preg_replace问题
【发布时间】:2010-06-19 08:20:19
【问题描述】:

我正在尝试替换类似的内容:

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

预期:

Hello <?name?> !!

结果:

Hello !!

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

我尝试了很多方法,但似乎我永远无法获得任何&lt;?(或&lt;?php)字符串。 我认为这可能与 Ubuntu 中默认启用的 Suhosin 补丁有关。在做任何其他事情之前,有人知道如何让它发挥作用吗?

谢谢。

更新:

我直接在命令行中尝试过,它成功了。是的,问题是 php 标签之间的任何内容都没有显示在浏览器(Chrome)中,甚至在源代码中也没有。

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

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

谢谢!!!

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

【问题讨论】:

    标签: php preg-replace str-replace


    【解决方案1】:

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

    如果您没有在任何地方使用eval(),PHP 将无法真正解释这些标签。

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

    来解决它
    &lt; &gt;
    

    改为。

    【讨论】:

    • 比我的答案更好。至少你给了 HTML 实体来替换。该死的打字慢。
    【解决方案2】:

    这和苏霍辛无关。

    &lt;?name?&gt; !! 在 HTML 页面中显示时会导致 !!

    检查页面来源。

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        【解决方案4】:

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

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

        htmlspecialchars 将替换:

        • & 与 &
        • " 与 "
        • 与>

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

        【讨论】:

          猜你喜欢
          • 2011-07-11
          • 1970-01-01
          • 1970-01-01
          • 2023-04-07
          • 2011-08-24
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多