preg_replace - Suche zwischen 2 Tags

BruniGunde

Grünschnabel
Hi,

ich versuche derzeit, dass zwischen 2 bestimmten HTML Tags (<pre>) alle HTML Codes so umzuwandeln, dass die Klammern "<" und ">" abgeändert werden in die HTML Codes &lt; und &gt; .

Hab versucht das mit preg_replace umzusetzen, statt eine große eigene Funktion dafür zu schreiben, jedoch scheine ich da etwa zu hängen. Es will mir einfach nicht gelingen.

PHP:
$content = preg_replace("/\<pre class=\"wiki\"\>(.*?)\</\pre>/i", '<pre class=\"wiki\">'. htmlentities('\\1') .'</pre>',$pages[0]["pContent"]);

$content = preg_replace("/(<pre class=\"wiki\">)(\w+)(</pre>)/e", "'\\1'. strstr('\\2','<','&lt;').'\\3'", $content);

$content = preg_replace("/\<pre class=\"wiki\"\>(.*?)\<\/\\1\>/i", "<$1 class=\"wiki\">$2</$1>",$pages[0]["pContent"]); &

Das waren meine drei versuche bisher.

Sehen alle wahrscheinlich doof aus, aber wenn man das erste mal was macht, dann ist das eben nicht so einfach. Hab versucht mich nach der Erklärung auf http://de.php.net/manual/de/function.preg-replace.php zu halten, scheinbar ist das aber zu kompliziert.

Wisst ihr Hilfe?

LG
BruniGunde
 
Habe es jetzt einfach mal mit einer Callback-Funktion für dich gelöst:

PHP:
echo preg_replace_callback(
    '=<pre(.*)>(.*)</pre>=Uis',
    create_function(
        '$match',
        'return "<pre{$match[1]}>" . htmlentities("$match[2]") . "</pre>";'),
    $string);
Jedoch kann sie in dem Umfang kein <pre> in <pre> verarbeiten - Da wäre dann noch eine Modifikation des Quantifiers notwendig und ein paar weitere Änderungen.
 
Danke für die Lösung.

Funktioniert einwandfrei. Muss ich mich mal umsehen was die Funktionen machen, man will ja schließlich auch verstehen was das ist ;)
 
Im Grunde tut es das hier:
PHP:
echo preg_replace(
    '=<pre(.*)>(.*)</pre>=Uise',
    "'<pre' . stripslashes('\\1') . '>' . htmlentities(stripslashes('\\2')) . '</pre>'",
    $string);
Bloß um einiges schneller ;)

(Und ich mag den evaluate-Modifikator nicht...)
 
Zurück