代码之家  ›  专栏  ›  技术社区  ›  lepe

PHP str\u replace/preg\u用PHP open标记替换问题

  •  2
  • lepe  · 技术社区  · 14 年前

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

    Hello <?name?> !!
    

    结果:

    Hello !!
    

    我试过很多方法,但似乎从来没有结果 <? (或 <?php )字符串。 我认为这可能与Ubuntu默认启用的Suhosin补丁有关。在做其他事情之前,有人知道如何让它发挥作用吗?

    非常感谢。

    更新:

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

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

    抱歉,我不得不选择最好的答案。。。但对我来说,这三个答案是正确的。

    4 回复  |  直到 3 年前
        1
  •  2
  •   Pekka    14 年前

    你真的查看过浏览器的源代码视图吗? <? ?>

    如果你不使用 eval() 在任何地方,PHP都不可能真正解释这些标记。

    也许苏霍辛过滤掉了这些,但那会让我吃惊。你可以通过使用

    &lt; &gt;
    

    相反。

        2
  •  1
  •   Mike    14 年前

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

    检查页面源。

        3
  •  1
  •   Mike    14 年前

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

    $search = array('<', '>', '--');
    $replace = array('&lt;', '&gt;', '?');
    $text = 'Hello <--name--> !!';
    echo str_replace($search,$replace,$text);
    
        4
  •  0
  •   matsolof    14 年前

    您还可以使用htmlspecialchars,如下所示:

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

    htmlspecialchars将替换:

    • &带(&A);amp;
    • “与&引用;
    • <
    • 带(&A);燃气轮机;

    如果出于某种原因不想替换“0”,则可以(参见 http://se2.php.net/manual/en/function.htmlspecialchars.php &amp; , &lt; &gt; 使用htmlspecialchars时。