文本替换:PHP/regex

在查看源代码模式下,我看到了一个与此类似的 HTML 文档(为简洁起见,下面进行了简化):


<html>

    <head>

        <title>System version: {{variable:system_version}}</title>

    </head>

    <body>

        <p>You are using system version {{variable:system_version}}</p>

        {{block:welcome}}

        <form>

            <input value="System version: {{variable:system_version}}">

            <textarea>

                You are using system version {{variable:system_version}}.

            </textarea>

        </form>

    </body>

</html>

我已经写了一些可以替换这些{{...}}类型字符串的函数,但是它们需要有选择地替换。


在上面的示例中,我希望将其替换为 in<title>和 in <p>,而不是 in <input>,<textarea>因为这是用户提供的输入,将通过所见即所得编辑器或表单插入,并且必须保存为从用户收到的。该{{block:welcome}}也必须用它包含任何内容所取代。


在渲染我的输出时,我会对它进行消毒,然后结果应该是这样的:


<html>

    <head>

        <title>System version: 6.0</title>

    </head>

    <body>

        <p>You are using system version 6.0</p>

        <div>

            This was the content of the welcome block.

        </div>

        <form>

            <input value="System version: {{variable:system_version}}">

            <textarea>

                You are using system version {{variable:system_version}}.

            </textarea>

        </form>

    </body>

</html>

这是我尝试过的。对于下面的代码,$var 的值是 '6.0',$val 的值 = '{{variable:system_version}}',$data 是要搜索的整个字符串:


if (!preg_match('/<textarea|<input|<select(.+?)' . $val . '(.+?)<\/textarea|<\/input|<\/select\>/s', $data)) {

    $data = str_replace($val, $var, $data);

}    

请告知我的正则表达式有什么问题,因为它目前if无法替换任何内容,因此条件永远不会匹配。如果我做了str_replace没有if,则更换由,在所有情况下。


杨__羊羊
浏览 148回答 2
2回答
打开App,查看更多内容
随时随地看视频慕课网APP