2016-07-18 2 views
0

К сожалению, я сохраняю часть 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; 

внутри моей функции. Он работает, но мне нужно вернуть rendered $ htmlPart как переменную, но я не могу заставить ее работать.

Я даже пытался сделать это с помощью ob_start:

ob_start(); 
echo $htmlPart 
$html = ob_get_contents(); 
ob_end_clean(); 

Но это не работает, вот это то, что я получаю:

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

(это визуализируется HTML я в исходном коде)

Любая идея, что я делаю неправильно?

+0

почему вы просто не CONCAT строки с вар? Вы знаете, старомодный способ? – Jeff

+0

Итак, вы * буквально * имеете '{$ data ['url']}', хранящиеся в вашей базе данных, и вы хотите заменить его своим значением? Вам понадобится проанализировать строку (возможно, с помощью регулярного выражения) и заменить значения. –

+2

Если это буквальная строка, как мы объясним: «Если я делаю« echo $ htmlPart »внутри моей функции, она работает». ОП можете подтвердить это? Он действительно выводит 'href =" example.com ", если вы эхо из функции? – BeetleJuice

ответ

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; 
} 
+0

Я думаю, что он * буквально * имеет строку '{$ data ['url']}' сохраненную в своей базе данных. –

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

Смежные вопросы