php: preg_replace()
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
anrichten
array
atomkraft
code
eintrag
entscheidende auszug
geschafft code
http
input
interpreter
match
nachteil
problemlos laufen
schaden
test
text
treffer
url
zeichen
zwischenzeit
-
Hallo!
Wenn ich meinen Text, hier in $eintrag mittels preg_replace() abändere...
z.B. so:
$eintrag = preg_replace('#test1(.*)test2(.*)test3#isU', "$1 testet $2", $eintrag);
...besteht dann irgendwie die Möglichkeit, $1 ebenfalls mit preg_replace() zu ändern?
Beitrag zuletzt geändert: 9.5.2011 19:40:26 von anti-atomkraft -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Vielleicht hilft dir hier preg_split() weiter,
da hast du dann die einzelnen Ergebnisse in einem Array
und kannst diese dann einzeln weiterbearbeiten. -
Oh! Der Befehl ist mir neu...
Ich habe mir nun einige Tutorials durchgelesen, komme damit aber nicht klar...
Was muss ich machen, um in folgendem Befehl
$eintrag=preg_replace('#[ code ](.*)[ /code ]#isU', "... $1 ...", $eintrag);
(Leerzeichen, damit das hier im Forum nicht umgewandelt wird) $1 herauszufiltern
und ebenfalls z.B. mit preg_replace() zu verändern:
$1=preg_replace('#[#isU', "[", $1); $1=preg_replace('#]#isU", "]", $1);
??? -
Hey
Es wäre vllt hilfreich wenn du die Endapplikation nennst. Möchtest du zufällig einen BB-Code Interpreter schreiben?
Das wäre auch wie folgt möglich:
$replacecodes = array( '[b]', '[/b]', ... ); $replacements = array( '<b>', </b>', ... ); $text = str_replace( $replacecodes, $replacements, $text);
Wäre denk ich sogar performanter.
Um den Code zwischen den Tags zu bekommen, also das in den Klammern, kannst du glaub ich nicht preg_replace verwenden. Dafür müsstest du preg_match( muster , nadel , speichervariable ) nutzen.
Liebe Grüße -
Genau!
Ich bin dabei, für meinen Chat einen BBCode-Interpreter zu schreiben...
Nur folgendes habe ich noch nicht geschafft:
[url=example.org]Test[/url]
Innerhalb des Code-Tags soll kein BBC umgewandelt werden...
Beitrag zuletzt geändert: 14.5.2011 11:00:03 von anti-atomkraft -
Hmm, also es ist früh am morgen, erwarte nich zu viel, aber ich würd vermutlich so schummeln:
$text = [url={example.org}]Test[/url] $needle = array( '[url={’ , '}]', '[/url]' ); $replace = array ('<a href="' , '">' , '</a>'); $output = str_replace ($needle, $replace, $text );
Funktioniert vllt bestimmt irgendwie, kA, ungetestet.
Ist aber noch früh, also teste es vorher^^ -
Hi!
Man sollte unbedingt auch auf XSS achten und das so weit, wie möglich abfangen! str_replace hat außerdem den Nachteil, dass wenn der BBCode nicht vollständig geschlossen ist, man sich sein ganzes HTML versaut.
anti-atomkraft schrieb:
Nur folgendes habe ich noch nicht geschafft:
[url=example.org]Test[/url]
Innerhalb des Code-Tags soll kein BBC umgewandelt werden...
<?php function callback_url ($match) { return sprintf("<a href=\"http://%s\">%s</a>", htmlentities($match[1]), htmlentities($match[2])); } //... $input = "...[url=http://google.de?q=<br />]Test<br />[/url]..."; $input = preg_replace_callback("/\[url=http:\/\/(.*)\](.*)\[\/url\]/isU", 'callback_url' , $input); echo $input; //... ?>
Das sieht dann so aus:
http://i-spacke.lima-city.de/url_bbcode.php
Ist jetzt nur schnell zusammengeschrieben. Sollte man wahrscheinlich noch mehr verfeinern, je nachdem, was du halt für deine Zwecke brauchst.
Wenn du das jetzt vor den anderen BBCodes durchführst, sollte das problemlos laufen.
LG Spacke
-
Danke!
Bin in der Zwischenzeit bereits selbst auf diese Lösung gekommen und habe sogar Farbe ins Spiel gebracht:
function parseVar($treffer) { $str = $treffer[1]; $str = str_replace("[", "<span style=\"color:#007700\">[</span>", $str); $str = str_replace("]", "<span style=\"color:#007700\">]</span>", $str); $str = preg_replace("/('.*')/Uis", "<span style=\"color:#DD0000\">\\1</span>", $str); $str = preg_replace("/(".*")/Uis", "<span style=\"color:#DD0000\">\\1</span>", $str); $str = "<span style=\"color:#0000BB\">".$str."</span>"; return $str; } $eintrag = preg_replace('#\[(code|php)\](.*)\[/(code|php)\]#isU', "<b><u>$1:</u></b><div class=\"code\">[var]$2[/var]</div>", $eintrag); $eintrag = preg_replace('#\[code=(.*)\](.*)\[/code\]#isU', "<b><u>$1:</u></b><div class=\"code\">[var]$2[/var]</div>", $eintrag); $eintrag = preg_replace_callback("/\[var\](.*)\[\/var\]/Usi", 'parseVar', $eintrag);
-
Natürlich ersetze ich die Zeichen "<", sowie ">"...
Das war gerade nur der entscheidende Auszug aus dem Quellcode. -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage