如何使用变量呈现字符串?

时间:2016-07-18 13:28:52

标签: php

不幸的是,我将部分HTML代码保留在数据库中,并且我在使用变量进行渲染时遇到问题。

public function myFunction()
{
    //...
    // example data
    $data = array(
        'url' => 'example.com',
        'value' => 'Go to website!'
    );

    //Here I get html code from database, let's say it looks like this:
    $htmlPart = "<a href='{$data['url']}'>{$data['value']}</a>";

    $html = // rendered $htmlPart with variables

    return $html;
}

如果我这样做:

echo $htmlPart;

在我的功能中。它有效,但我需要将呈现的 $ htmlPart 作为变量返回,但我无法使其正常工作。

我甚至尝试使用 ob_start

来做到这一点
ob_start();
echo $htmlPart
$html = ob_get_contents();
ob_end_clean();

但它不起作用,这就是我得到的:

<a href="{$data['url']}">
    {$data['value']}
</a>

(这是我在源代码中得到的html)

知道我做错了什么吗?

2 个答案:

答案 0 :(得分:0)

使用:

public function myFunction()
{
    //...
    // example data
    $data = array(
        'url' => 'example.com',
        'value' => 'Go to website!'
    );

    $htmlPart = "<a href='".$data['url']."'>".$data['value']."</a>"; // change to this

    $html = // rendered $htmlPart with variables

    return $html;
}

答案 1 :(得分:0)

您可以尝试使用正则表达式和preg_replace_callback来解析字符串中的变量,并将其替换为值。

这样的事情:

<?php    
$data = array(
    'url' => 'example.com',
    'value' => 'Go to website!'
);

//Here I get html code from database, let's say it looks like this:
// Single quotes so it's the *literal* text
$htmlPart = '<a href=\'{$data[\'url\']}\'>{$data[\'value\']}</a>';

// Double backslashes needed so the regex is correct
$html = preg_replace_callback("/\\{\\$(.*?)\\['(.*?)']}/", function($matches) use($data){
    return $data[$matches[2]];
}, $htmlPart);

echo $html;

DEMO:https://eval.in/607169