replace funktion [PHP]

Thag die Herren

Ich habe eine replace funktion kopiert, ja die bbcode dings, und etwas angepasst.
Ging soweit ja auch ganz gut, nur war der schreiber nicht der hellste.
Soblad ? & oder = in einer URL vorkommen geht nichtsmehr. Die strings werden nichtmehr umgeformt.

Ich dachte mir, haha, ech erweitere meine funktion einfach um die paar Zeichen, das geht mit http.// und www wie auch [_url]blabla[_/url] aber nicht bei [_url=http.//URL]name[_/url] und [_url=www]name[_/url] _wegen der umformung hier.

Diese 2 gehen allesamt nicht:
Code:
// [URL=http://]Name[/URL]
$s=preg_replace("=(^|\ |\\n)\[url\=(http:\/\/|http:\/\/www\.)([a-zA-Z0-9\.\/\-\_]{1,})\]([a-zA-Z0-9\:\.\/\-\_\?\&\=]{1,})\[/url\]=i",
"\\1<a href=\"\\2\\3\" >\\4</a> ",$s);

//[URL=www.]Name[/URL]
 $s=preg_replace("=(^|\ |\\n)\[url\](www\.)([a-zA-Z0-9\.\/\-\_\?\&\=]{1,})\[/url\]=i",
"\\1<a href=\"http://\\2\\3\" >\\2\\3</a> ",$s);

$s=preg_replace("=(^|\ |\\n)\[url\=(|www\.)([a-zA-Z0-9\.\/\-\_\?\&\=]{1,})\]([a-zA-Z0-9\:\.\/\-\_]{1,})\[/url\]=i",
"\\1<a href=\"http://\\2\\3\" >\\4</a> ",$s);

Diese 2 gehen: (angepasst, man beachte die erweiterten zeichen ?, &, =
Code:
// www.
$s=preg_replace("=(^|\ |\\n)(www\.)([a-zA-Z0-9\.\/\-\_\?\&\=]{1,})=i",
"\\1<a href=\"http://\\2\\3\" >\\2\\3</a> ",$s);

// [URL]http://[/URL]
$s=preg_replace("=(^|\ |\\n)\[url\](http:\/\/|http:\/\/www\.)([a-zA-Z0-9\.\/\-\_\?\&\=]{1,})\[/url\]=i",
"\\1<a href=\"\\2\\3\">\\2\\3</a> ",$s);
Ich hoffe ihr wisst was ich mein, und irgendwar kann mir helfen.
 
Hallo,
hier mein Code:
PHP:
<?php
$text = "Mein Text";


//[URL] und [EMAIL] hinzufügen
//Ausführen nach dem Speichern

  $urlsuch[]="/([^]_a-z0-9-=\"'\/])((https?|ftp):\/\/|www\.)([^ \r\n\(\)\^\$!`\"'\|\[\]\{\}<>]*)/si";
   $urlsuch[]="/^((https?|ftp):\/\/|www\.)([^ \r\n\(\)\^\$!`\"'\|\[\]\{\}<>]*)/si";

   $urlreplace[]="\\1[URL]\\2\\4[/URL]";
   $urlreplace[]="[URL]\\1\\3[/URL]";


   $emailsuch[]="/([\s])([_a-zA-Z0-9-]+(\.[_a-zA-Z0-9-]+)*@[a-zA-Z0-9-]+(\.[a-zA-Z0-9-]+)*(\.[a-zA-Z]{2,}))/si";
   $emailsuch[]="/^([_a-zA-Z0-9-]+(\.[_a-zA-Z0-9-]+)*@[a-zA-Z0-9-]+(\.[a-zA-Z0-9-]+)*(\.[a-zA-Z]{2,}))/si";

   $emailreplace[]="\\1[EMAIL]\\2[/EMAIL]";
   $emailreplace[]="[EMAIL]\\0[/EMAIL]";

   $text = preg_replace($urlsuch, $urlreplace, $text);
   if (strpos($text, "@")) $text = preg_replace($emailsuch, $emailreplace, $text);



//[URL] und [EMAIL] in Links umwandeln
$text = preg_replace("/\[URL\]www.(.*?)\[\/URL\]/si", "<a target=\"_blank\" href=\"http://www.\\1\">www.\\1</a>", $text);
   $text = preg_replace("/\[URL\](.*?)\[\/URL\]/si", "<a target=\"_blank\" href=\"\\1\">\\1</a>", $text);

   $text = preg_replace("/\[URL=www.(.*?)\](.*?)\[\/URL\]/si", "<a target=\"_blank\" href=\"http://www.\\1\">\\2</a>", $text);
   $text = preg_replace("/\[URL=(.*?)\](.*?)\[\/URL\]/si", "<a target=\"_blank\" href=\"\\1\">\\2</a>", $text);



   //E-Mail aendern
   $text = preg_replace("/\[EMAIL\](.*?)\[\/EMAIL\]/si", "<a href=\"mailto:\\1\">\\1</a>", $text);
   $text = preg_replace("/\[EMAIL=(.*?)\](.*?)\[\/EMAIL\]/si", "<a href=\"mailto:\\1\">\\2</a>", $text);
?>
 
Ach, öm, das versteh' ich noch viel weniger als meine funktionen.
Danke für die Mühe, aber, achwas, ich versteh das nicht.

Ich möchte viel lieber "meine" funktion anpassen... Irgendwie, ich versteheh nicht wieso bei der [_url=bla funktion 2mal die Suchmuster klammer kommt. Irgendwie. hrmpf. (bei mir)

edit: [URL]http://word.activebox.ch/bla.txt[/URL]

Um es etwas deutlicher auszudrücken ;)
 
Zurück
Oben