Php 使用preg_replace将模板呈现为真实html
我想用HTML代码替换模板,效果很好,但问题是我在呈现的HTML中使用了php代码,它不能像字符串一样打印运行。 这是代码:Php 使用preg_replace将模板呈现为真实html,php,html,preg-replace,preg-replace-callback,Php,Html,Preg Replace,Preg Replace Callback,我想用HTML代码替换模板,效果很好,但问题是我在呈现的HTML中使用了php代码,它不能像字符串一样打印运行。 这是代码: $template = '[text required id="first_name" label="First Name"]'; $pattern = ['/^\[([a-z]+)\s{1,}(required)?\s{1,}(?:id|label)="([^"]+)"\s{1,}(?:id|label)="([^"]+)"\s{0,}\]/im']; $repla
$template = '[text required id="first_name" label="First Name"]';
$pattern = ['/^\[([a-z]+)\s{1,}(required)?\s{1,}(?:id|label)="([^"]+)"\s{1,}(?:id|label)="([^"]+)"\s{0,}\]/im'];
$replacement = ['<label for="$3">$4 ($2)</label>
<input type="text" name="$3" id="$3"
<?php if( !empty($data["$3"]) ) { echo \'value="{$data[\"$3\"]}"\'; }?> />'];
$output = preg_replace($pattern, $replacement, $template);
echo $output;
$template='[text required id=“first_name”label=“first name”];
$pattern=['/^\[([a-z]+)\s{1,}(必需)?\s{1,}(?:id | label)=“([^”]+)”\s{1,}(?:id | label)=“([^”]+)”\s{0,}\]/im;
$replacement=['$4($2)
因为您想要评估PHP,所以它必须在服务器端,并且将在从服务器输出之前执行。我希望您清楚这一点
现在,由于您需要在服务器上运行它,并且您正在服务器上生成代码本身,那么直接运行它而不将其存储在字符串中如何,除非您是从其他地方以字符串的形式从数据库中获取php代码
但是,您可以使用eval
函数来评估PHP中的一系列代码。但是,我不建议您的网站存在安全风险
正如上面所说:
小心
eval()
语言构造非常危险,因为它允许执行任意PHP代码。因此不鼓励使用它。如果您仔细验证了除了使用此构造之外没有其他选择,请特别注意,在未事先正确验证的情况下,不要将任何用户提供的数据传递到该构造中
所以你应该非常小心处理这个问题
希望能有所帮助。这是答案
<?php
$template = '[text required id="first_name" label="First Name"]';
$pattern = ['/^\[([a-z]+)\s{1,}(required)?\s{1,}(?:id|label)="([^"]+)"\s{1,}(?:id|label)="([^"]+)"\s{0,}\]/im'];
$replacement = ['<label for="$3">$4 ($2)</label>
<input type="text" name="$3" id="$3" '. get_data("$3") .' />'];
$output = preg_replace($pattern, $replacement, $template);
echo $output;
function get_data($index){
if( !empty($data[$index]) ) {
echo 'value="{$data[$index]}"';
}
}
非常感谢,非常有帮助:)