Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/91.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用preg_replace将模板呈现为真实html_Php_Html_Preg Replace_Preg Replace Callback - Fatal编程技术网

Php 使用preg_replace将模板呈现为真实html

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

我想用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'];

$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]}"'; 
   }
}

非常感谢,非常有帮助:)