使用str_replace用PHP标记替换HTML注释

时间:2014-09-14 11:41:00

标签: php

使用PHP,我正在尝试创建一个函数,它将用打开和关闭的PHP标记替换特定的打开和关闭HTML注释。 发生的事情是当我将注释的HTML作为主题字符串输入时,它被嵌入到HTML文档中,而不是被PHP标记替换。但是,当我输入除HTML评论之外的其他内容时,它很好 - 正如您所期望的那样。 var_dump()分别为$ foo和$ bar返回字符串(32)“”和NULL。 例如,下面的函数旨在替换:

    <!--CODE echo"hello world"; CODE--!>

使用:

    <?php echo"hello world"; ?>

代码:

    <?php
    function code($subject){
        $php=array("<?php","?>"); //the replace string array
        $html=array("<!--CODE","CODE--!>"); //the search string array
        $subject=str_replace($html,$php,$subject); //search the subject and replace strings
    }
    if(isset($_POST['submit'])){
        $foo=$_POST['foo'];
        $bar=code($foo);
    }

    ?>

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"         "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <title>Untitled Document</title>
    </head>

    <body>
    <?php
    var_dump($foo);
    var_dump($bar);
    ?>
    <form method="post" action="">
    <input type="text" name="foo" />
    <input type="submit" name="submit" value="Submit" />
    </form>
    </body>
    </html>

有什么想法吗?非常感谢您的意见。

1 个答案:

答案 0 :(得分:0)

我希望这是你想要完成的事情。

<?php
    function code($subject) {
        $php = array("<?php", "?>"); //the replace string array
        $html = array("<!--CODE", "CODE-->"); //the search string array
        return str_replace($html, $php, $subject); //search the subject and replace strings
    }

    if(isset($_POST['foo'])) {
        $foo = $_POST['foo'];
        $bar = code($foo);
    }

?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"         "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Untitled Document</title>
</head>

<body>
<?php
if (isset($foo)) {
    echo 'foo = ';
    var_dump($foo);
}

if (isset($bar)) {
    echo 'bar = ';
    var_dump($bar);
}
?>

<form method="post" action="">
<input type="text" name="foo" />
<input type="submit" name="submit" value="Submit" />
</form>
</body>
</html>

我使用HTML标准评论结束标记编辑了$html数组中的评论结束标记,并编辑了code()函数的第三行。现在,这些值未分配回$subject,但已退回(return str_replace($html, $php, $subject))。