【问题标题】:rendering template to real html using preg_replace使用 preg_replace 将模板渲染为真实的 html
【发布时间】:2017-12-01 07:42:40
【问题描述】:

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

这是输出:

这是输出的来源:

提前致谢。

【问题讨论】:

    标签: php html preg-replace preg-replace-callback


    【解决方案1】:

    这就是答案

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

    【讨论】:

      【解决方案2】:

      因为您要评估 PHP,所以它必须在服务器端,并且在从服务器输出之前执行。我希望你清楚这一点。

      现在,由于您需要在服务器上运行它并且您在服务器上生成代码本身,如何直接运行它而不将其存储在字符串中,除非您从其他地方获取 php 代码作为字符串从数据库。

      但是,您可以使用eval 函数来评估 PHP 中的代码字符串。但是,我不建议这样做会给您的网站带来安全风险。

      正如PHP manual 所说:

      注意 eval() 语言结构非常危险,因为它允许执行任意 PHP 代码。因此不鼓励使用它。如果您已仔细验证除了使用此构造别无其他选择,请特别注意不要将任何用户提供的数据传入其中,而无需事先正确验证。

      所以你应该非常小心处理这个。

      希望它会有所帮助。

      【讨论】:

      • 非常感谢,很有帮助:)
      猜你喜欢
      • 1970-01-01
      • 2018-01-17
      • 2016-11-13
      • 1970-01-01
      • 2019-08-13
      • 2016-06-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多