| Neuer Benutzer
Registriert seit: 31.05.2008
Beiträge: 20
PHP-Kenntnisse: Fortgeschritten
| Hm, ich glaube, ich habe die regexp jetzt so weit, dass sie beinahe alles erkennt. alles geht nicht, da dann solche Probleme auftauchen, wie dass plötzlich irgendwelche Sätze, wo man ein Leerzeichen vergessen hat, als Link erkannt werden.
So sieht die Regexp zum Erkennen der Links im Moment bei mir aus: Code: /((((((http(s){0,1})|ftp):\/\/)www\.)|(((http(s){0,1})|ftp):\/\/)|(www\.))(((([\.a-z0-9\-]*?)|(([0-9]{1,2})|([0-1][0-9]{2})|(2(([0-4][0-9])|(5[0-4])))).(([0-9]{1,2})|([0-1][0-9]{2})|(2(([0-4][0-9])|(5[0-4])))).(([0-9]{1,2})|([0-1][0-9]{2})|(2(([0-4][0-9])|(5[0-4])))).(([0-9]{1,2})|([0-1][0-9]{2})|(2(([0-4][0-9])|(5[0-4]))))(:[0-9]*){0,1})(([ä|ö|ü|ß|a-z|0-9|-|_|\.|\/|\%])|(\([ä|ö|ü|ß|a-z|0-9|-|_|\.|\/|\%]*?\)))*?(([ä|ö|ü|ß|a-z|0-9|-|_|\/|\%])|(\([ä|ö|ü|ß|a-z|0-9|-|_|\.|\/|\%]*?\))))))/iU
für die Erkennung von Links auf Bilder: Code: /\<a href=\"((((((http(s){0,1})|ftp):\/\/)www\.)|(((http(s){0,1})|ftp):\/\/)|(www\.))(((([\.a-z0-9\-]*?)|(([0-9]{1,2})|([0-1][0-9]{2})|(2(([0-4][0-9])|(5[0-4])))).(([0-9]{1,2})|([0-1][0-9]{2})|(2(([0-4][0-9])|(5[0-4])))).(([0-9]{1,2})|([0-1][0-9]{2})|(2(([0-4][0-9])|(5[0-4])))).(([0-9]{1,2})|([0-1][0-9]{2})|(2(([0-4][0-9])|(5[0-4]))))(:[0-9]*){0,1})(([ä|ö|ü|ß|a-z|0-9|-|_|\.|\/|\%])|(\([ä|ö|ü|ß|a-z|0-9|-|_|\.|\/|\%]*?\)))*?(([ä|ö|ü|ß|a-z|0-9|-|_|\/|\%])|(\([ä|ö|ü|ß|a-z|0-9|-|_|\.|\/|\%]*?\)))))(\.(jpg|jpeg|png|bmp|svg|gif)))\"\>(.*?)\<\/a\>/iU
Bei deinem Beispiel Text kommt dabei folgendes raus: Code: Dieser Text ist ein fieser URL Erkennungstest, dies: <a href="www.test11111.net">www.test11111.net</a>, test3888.com und test.test83333.de sind gültige URLS (natürlich ohne die Kommata). Es gibt auch noch andere (z.B. <a href="http://de.wikipedia.org/wiki/Iron_Man_(Film)">http://de.wikipedia.org/wiki/Iron_Man_(Film)</a>) <- die zweite Klammer gehört aber nicht zur URL . <a href="http://www.derbaersteppthiergenauso....ch%20fies%20">http://www.derbaersteppthiergenauso....ch%20fies%20</a>)/ http, https:// darf man nicht vergessen und was ist mit <a href="ftp://www.gemeinerlink.foo">ftp://www.gemeinerlink.foo</a> oder <a href="http://192.168.1.1">http://192.168.1.1</a>? Und Satzzeichen? Fies ist auch: <a href="http://www.satzzeichen_am_ende_.com">http://www.satzzeichen_am_ende_.com</a>. <- der Punkt gehört auch nicht dazu und der Unterstrich im 2ndlevel Dings?<br />
mein kompletter Code von der Funktion sieht so aus: PHP-Code: public function encodeBBC($text) { $pattern = array(); $replace = array();
$pattern[] = "/&/"; $replace[] = "&";
$pattern[] = "/ä/"; $replace[] = "ä";
$pattern[] = "/Ä/"; $replace[] = "Ä";
$pattern[] = "/ö/"; $replace[] = "ö";
$pattern[] = "/Ö/"; $replace[] = "Ö";
$pattern[] = "/ü/"; $replace[] = "ü";
$pattern[] = "/Ü/"; $replace[] = "Ü";
$pattern[] = "/ß/"; $replace[] = "ß";
$pattern[] = "/</"; $replace[] = "<";
$pattern[] = "/>/"; $replace[] = ">";
$pattern[] = "/\[b\](.*?)\[\/b\]/is"; $replace[] = "<span style=\"font-weight: 900;\">$1</span>";
$pattern[] = "/\[u\](.*?)\[\/u\]/is"; $replace[] = "<span style=\"text-decoration: underline;\">$1</span>";
$pattern[] = "/\[i\](.*?)\[\/i\]/is"; $replace[] = "<span style=\"font-style: italic;\">$1</span>";
$pattern[] = "/\[color(=| ){0,1}(red|green|blue|(#[A-F0-9]{6})|rgb\((([0-9]{1,2})|([0-1][0-9]{2})|(2(([0-4][0-9])|(5[0-5])))), {0,1}(([0-9]{1,2})|([0-1][0-9]{2})|(2(([0-4][0-9])|(5[0-5])))), {0,1}(([0-9]{1,2})|([0-1][0-9]{2})|(2(([0-4][0-9])|(5[0-5]))))\)|rgba\((([0-9]{1,2})|([0-1][0-9]{2})|(2(([0-4][0-9])|(5[0-5])))), {0,1}(([0-9]{1,2})|([0-1][0-9]{2})|(2(([0-4][0-9])|(5[0-5])))), {0,1}(([0-9]{1,2})|([0-1][0-9]{2})|(2(([0-4][0-9])|(5[0-5])))), {0,1}((0\.[0-9]*)|1)\))\](.*?)\[\/color\]/is"; $replace[] = "<span style=\"color: $2;\">$48</span>";
$pattern[] = "/\[size(=| ){0,1}([1-9])\](.*?)\[\/size\]/is"; $replace[] = "<span class=\"size-$2\">$3</span>";
$pattern[] = "/\[(text|font|style) {0,1}((b|u|i|[1-9]){0,1} {0,1}(b|u|i|[1-9]){0,1} {0,1}(b|u|i|[1-9]){0,1} {0,1}(b|u|i|[1-9]){0,1} {0,1})((red|green|blue|(#[A-F0-9]{6})|rgb\((([0-9]{1,2})|([0-1][0-9]{2})|(2(([0-4][0-9])|(5[0-5])))), {0,1}(([0-9]{1,2})|([0-1][0-9]{2})|(2(([0-4][0-9])|(5[0-5])))), {0,1}(([0-9]{1,2})|([0-1][0-9]{2})|(2(([0-4][0-9])|(5[0-5]))))\)|rgba\((([0-9]{1,2})|([0-1][0-9]{2})|(2(([0-4][0-9])|(5[0-5])))), {0,1}(([0-9]{1,2})|([0-1][0-9]{2})|(2(([0-4][0-9])|(5[0-5])))), {0,1}(([0-9]{1,2})|([0-1][0-9]{2})|(2(([0-4][0-9])|(5[0-5])))), {0,1}((0\.[0-9]*)|1)\)){0,1})\](.*?)\[\/(text|font|style)\]/is"; $replace[] = "<span class=\"opt-$3 opt-$4 opt-$5 opt-$6\" style=\"color: $7;\">$54</span>";
$pattern[] = "/((((((http(s){0,1})|ftp):\/\/)www\.)|(((http(s){0,1})|ftp):\/\/)|(www\.))(((([\.a-z0-9\-]*?)|(([0-9]{1,2})|([0-1][0-9]{2})|(2(([0-4][0-9])|(5[0-4])))).(([0-9]{1,2})|([0-1][0-9]{2})|(2(([0-4][0-9])|(5[0-4])))).(([0-9]{1,2})|([0-1][0-9]{2})|(2(([0-4][0-9])|(5[0-4])))).(([0-9]{1,2})|([0-1][0-9]{2})|(2(([0-4][0-9])|(5[0-4]))))(:[0-9]*){0,1})(([ä|ö|ü|ß|a-z|0-9|-|_|\.|\/|\%])|(\([ä|ö|ü|ß|a-z|0-9|-|_|\.|\/|\%]*?\)))*?(([ä|ö|ü|ß|a-z|0-9|-|_|\/|\%])|(\([ä|ö|ü|ß|a-z|0-9|-|_|\.|\/|\%]*?\))))))/iU"; $replace[] = "<a href=\"$1\">$1</a>"; $pattern[] = "/\[link(=| ){0,1}\<a href=\"((((((http(s){0,1})|ftp):\/\/)www\.)|(((http(s){0,1})|ftp):\/\/)|(www\.))(((([\.a-z0-9\-]*?)|(([0-9]{1,2})|([0-1][0-9]{2})|(2(([0-4][0-9])|(5[0-4])))).(([0-9]{1,2})|([0-1][0-9]{2})|(2(([0-4][0-9])|(5[0-4])))).(([0-9]{1,2})|([0-1][0-9]{2})|(2(([0-4][0-9])|(5[0-4])))).(([0-9]{1,2})|([0-1][0-9]{2})|(2(([0-4][0-9])|(5[0-4]))))(:[0-9]*){0,1})(([ä|ö|ü|ß|a-z|0-9|-|_|\.|\/|\%])|(\([ä|ö|ü|ß|a-z|0-9|-|_|\.|\/|\%]*?\)))*?)))\"\>(.*?)\<\/a\>\](.*?)\[\/link\]/iU"; $replace[] = "<a href=\"$2\">$6</a>";
$pattern[] = "/\<a href=\"((((((http(s){0,1})|ftp):\/\/)www\.)|(((http(s){0,1})|ftp):\/\/)|(www\.))(((([\.a-z0-9\-]*?)|(([0-9]{1,2})|([0-1][0-9]{2})|(2(([0-4][0-9])|(5[0-4])))).(([0-9]{1,2})|([0-1][0-9]{2})|(2(([0-4][0-9])|(5[0-4])))).(([0-9]{1,2})|([0-1][0-9]{2})|(2(([0-4][0-9])|(5[0-4])))).(([0-9]{1,2})|([0-1][0-9]{2})|(2(([0-4][0-9])|(5[0-4]))))(:[0-9]*){0,1})(([ä|ö|ü|ß|a-z|0-9|-|_|\.|\/|\%])|(\([ä|ö|ü|ß|a-z|0-9|-|_|\.|\/|\%]*?\)))*?(([ä|ö|ü|ß|a-z|0-9|-|_|\/|\%])|(\([ä|ö|ü|ß|a-z|0-9|-|_|\.|\/|\%]*?\)))))(\.(jpg|jpeg|png|bmp|svg|gif)))\"\>(.*?)\<\/a\>/iU"; $replace[] = "<img src=\"$1\">";
$text = preg_replace($pattern, $replace, $text);
$patt = array(); $repl = array(); $patt[] = "/\[quote=(.*?)\](.*)\[\/quote\]/isU"; $repl[] = "<fieldset style=\"font-style: italic; background-color: rgba(0, 0, 0, 0.2); border: 1px solid black; border-radius: 5px;\"><legend style=\"font-style: normal; font-weight: 900;\">$1 schrieb:</legend>$2</fieldset>"; $patt[] = "/\[quote\](.*)\[\/quote\]/isU"; $repl[] = "<fieldset style=\"font-style: italic; background-color: rgba(0, 0, 0, 0.2); border: 1px solid black; border-radius: 5px;\"><legend style=\"font-style: normal; font-weight: 900;\">Zitat</legend>$1</fieldset>";
while (0 < preg_match_all("/\[quote=(.*?)\](.*)\[\/quote\]/is", $text, $m) || 0 < preg_match_all("/\[quote\](.*)\[\/quote\]/is", $text, $m)) { $text = preg_replace($patt, $repl, $text); }
return nl2br($text); }
mfg
mupilz
Geändert von mupilz (29.07.2011 um 14:45 Uhr).
|