在查看源代码模式下,我看到了一个与此类似的 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,则更换由,在所有情况下。