2016-07-18 12 views
0

Leider behalte ich einen Teil des HTML-Codes in der Datenbank und ich habe Probleme mit dem Rendern mit Variablen.Wie render String mit Variablen?

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

Wenn ich tun:

echo $htmlPart; 

in meiner Funktion. Es funktioniert, aber ich muss $ htmlPart als eine Variable zurückgegeben, aber ich kann es nicht funktionieren.

ich sogar, es zu tun versucht ob_start mit:

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

Aber es funktioniert nicht, hier ist es, was ich bekommen:

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

(diese HTML gerendert ich im Quellcode)

Irgendeine Idee was mache ich falsch?

+0

warum Sie nicht nur Concat die Zeichenfolge mit dem var? ..die altmodische Art, weißt du? – Jeff

+0

Sie haben * wörtlich * also '{$ data ['url']}} in Ihrer Datenbank gespeichert und möchten ihn durch seinen Wert ersetzen? Sie müssen die Zeichenfolge analysieren (möglicherweise mit einem Regex) und die Werte ersetzen. –

+2

Wenn es eine literale Zeichenfolge ist, wie erklären wir: "Wenn ich' echo $ htmlPart 'innerhalb meiner Funktion funktioniert es ". OP kannst du das bestätigen? Es gibt tatsächlich 'href =" example.com "' aus, wenn Sie innerhalb der Funktion ein Echo erzeugen? – BeetleJuice

Antwort

0

Verwendung:

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

Ich glaube, er * hat buchstäblich die Zeichenfolge '{$ data ['url']}} in seiner Datenbank gespeichert. –

0

Sie können versuchen, einen regulären Ausdruck und preg_replace_callback mit den Variablen aus der Zeichenfolge zu analysieren und ersetzen sie mit ihren Werten.

Etwas wie folgt aus:

<?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