• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Preg_replace Fehler

Status
Für weitere Antworten geschlossen.

T-sneak

Mitglied
Hi da ich gerade ein bischen mit den RegExp rumspiele wollte ich mal testen ob ich die Texte zwischen <autonl> und </autonl> mit nl2br versehen kann..
Ich hab mal was versucht aber das klappt irgentwie nicht er nimmt zwar die beiden Tags weg von <autonl> aber er setzt keine <br />..
Kann mir jmd. sagen was da falsch ist? ;ugl

PHP:
$text2 = preg_replace('/(\<autonl\>)(.*?)(\<\/autonl\>)/i',nl2br("$2"),$text);
 
Dafür brauchst du ein Callback:
PHP:
$text2 = preg_replace_callback('/(\<autonl\>)(.*?)(\<\/autonl\>)/i', 'callback', $text);

function callback($a) {
//$a ist ein array [0] enthält die kette, [1] den ersten treffer etc.
return nl2br($a[1]);
}
Habs jetzt nicht getestet, dürfte aber funktionieren.

Gruß
Alti

EDIT: Moment ich überarbeite es grade
 
Zuletzt bearbeitet von einem Moderator:
Hmm er zeigt zwar keinen fehler an aber er setzt auch leider keine <br /> :/

bzw im quell text hat er nicht mal die <autonl> verändert.. :(
 
Nimm mal mein jetztiges Script und setz ein var_dump($a); in die funktion. Denke die Ausgabe hilft dir weiter. Ich weiß ja nicht wie deine Eingabe aussieht ($text)
 
Hmm er gibt überhaupt nichts zurück :(

PHP:
<?php
$text = '<autonl><div style="padding: 5px;"> <div>Verwaltung durch JDC 3</div>

<b><em>Kontaktmöglichkeiten</em></b>
ICQ: 289787723 <img src="http://status.icq.com/online.gif?icq=289787723&img=5">
MSN: <a href="mailto:[email protected]">[email protected]</a>

</autonl>';
$text = preg_replace_callback('/(\<autonl\>)(.*?)(\<\/autonl\>)/i', 'callback', $text);

function callback($a) {
//$a ist ein array [0] enthält die kette, [1] den ersten treffer etc.
var_dump($a);
return nl2br($a[1]);
} 
echo $text;
?>
 
probier es mal mit dem modifier 'e'
PHP:
$text = preg_replace("%\<autonl\>(.*)\<\/autonl\>%ei", "nl2br('\\1')", $text);
 
hmm funktioniert leider alles nicht ich hab das aber jetzt anders gelöst und zwar wenn am anfang <bbcode/> steht dann werden bbcodes und nl2br aktiviert ;) ist auch okey :)
 
Da habe ich eine allgemeine Frage zu *_replace

*: Es gibt ja ereg_replace, str_replace und preg_replace

Wie schaffe ich es, einen Teil umzuändern, sodass ein Teil nicht geändert wird?

Also ich habe mal versucht einen BB Code zu machen, bei Links.

Bsp:
PHP:
<?php
preg_replace("[url=/* Hier soll der Inhalt stehen bleiben */]/*Der Text soll bleiben*/[/url], "<a href=\"/*Link von [url=*/\">/*Text zwischen [url]*/</a>", $_POST['homepage']);
?>
Wie kann ich sowas realisieren? Geht sowas mit preg_replace nicht?


LG script-man
 
PHP:
//Url mit Bild - http:// in der url vorhanden - url außerhalb von[url]
$content = preg_replace("#\[url\]http://(.*?)\[img\]http://(.*?)\[/img\]\[/url\]#si", "<a href=\"http://\\1\" target=\"_blank\"><img src=\"http://\\2\" border=\"0\"></a>", $content);
//Url mit Bild - http:// nicht vorhanden - url außerhalb von[url]
$content = preg_replace("#\[url\]www.(.*?)\[img\]www.(.*?)\[/img\]\[/url\]#si", "<a href=\"http://www.\\1\" target=\"_blank\"><img src=\"http://www.\\2\" border=\"0\"></a>", $content);
//Url mit Bild - http:// in der url vorhanden - url innerhalb von [url]
$content = preg_replace("#\[url=http://(.*?)\]\[img\]http://(.*?)\[/img\]\[/url\]#si", "<a href=\"http://\\1\" target=\"_blank\"><img src=\"http://\\2\" border=\"0\"></a>", $content);
//Url mit Bild - http:// nicht vorhanden - url innerhalb von [url]
$content = preg_replace("#\[url=www.(.*?)\]\[img\]www.(.*?)\[/img\]\[/url\]#si", "<a href=\"http://www.\\1\" target=\"_blank\"><img src=\"http://\\2\" border=\"0\"></a>", $content);
//Url http vorhanden adresse außerhalb von [url]
$content = preg_replace("#\[url\]http://(.*?)\[/url\]#si", "<a href=\"http://\\1\" target=\"_blank\">\\1</a>", $content);
//Url http nicht vorhanden, www vorhanden adresse außerhalb von [url]
$content = preg_replace("#\[url\]www.(.*?)\[/url\]#si", "<a href=\"http://\\1\" target=\"_blank\">http://www.\\1</a>", $content);
//Url mit http im [url] tag
$content = preg_replace("#\[url=http://(.*?)\](.*?)\[/url\]#si", "<a href=\"http://\\1\" target=\"_blank\">\\2</a>", $content);
//Url mit www im [url] tag
$content = preg_replace("#\[url=www.(.*?)\](.*?)\[/url\]#si", "<a href=\"http://www.\\1\" target=\"_blank\">\\2</a>", $content);
//Url ohne www im [url] tag
$content = preg_replace("#\[url=(.*?)\](.*?)\[/url\]#si", "<a href=\"\\1\">\\2</a>", $content);      // relativer link
//alle anderen angaben mit [url] tags
$content = preg_replace("#\[url\](.*?)\[/url\]#si", "<a href=\"\\1\">\\1</a>", $content);      // relativer link
//automatische Umwandlung zu url wenn kein [url] vorhanden
$content = preg_replace("#(^|[^\"=]{1})(http://|https://|ftp://|mailto:|news:)([^\s<>]+)([\s\n<>]|$)#sm","\\1<a href=\"\\2\\3\" target=\"_blank\">\\3</a>\\4",$content);
 
Zuletzt bearbeitet:
Status
Für weitere Antworten geschlossen.
Zurück
Oben