Mailinglisten-Archive |
Ist nicht schön, aber wirksam - und wie ich vermute, auch mit preg nicht zu verbessern, weil eine Negativ-Abfrage beantwortet werden müßte (sp ist meine "sichere" strpos-Variante, siehe http://www.php.net/manual/en/function.strpos.php, ssp ist zusätzlich case insensitiv ): function add_http($str) { if (!ssp($str, 'www.')) return $str; $str = str_replace('www.', 'http://www.', $str); return str_replace('http://http://', 'http://', $str); } function add_mailto($str){ if (!sp($str, '_(at)_')) return $str; $ar = explode(' ', $str); while(list($key, $val) = each($ar)) { if (sp($val, '_(at)_') && !ssp($val, 'mailto')){ $ar[$key] = 'mailto:' . $val; } } return implode(' ', $ar); } Unten ist übrigens ein Fehler drin; so geht es: function replace_uri($str) { $pattern = '#(^|[^\"=]{1})(http://|ftp://|mailto:|news:)([^\s<>]+)([\s\n<>]|$)#sm'; return preg_replace($pattern,"\\1<a href=\"\\2\\3\"><u>\\2\\3</u></a>\\4",$str); } Meiner Ansicht nach ist das noch sehr verbesserungswürdig. Denn so wird im Text immer mailto und http:// angezeigt, was nervtötend und überflüssig ist. Aber wirklich lästig ist, daß die Sache _nicht funktioniert_, wenn im Text die URL am Satzende steht und mit einem Punkt abgeschlossen ist (Beispiel: ... auf http://Mittelalter.de. Und so ... ). Wenn man gern Links in einem neuen Fenster aufmachen würde, müßte man ändern zu function replace_uri($str) { $pattern = '#(^|[^\"=]{1})(http://|ftp://|mailto:|news:)([^\s<>]+)([\s\n<>]|$)#sm'; return preg_replace($pattern,"\\1<a href=\"\\2\\3\" target=_blank><u>\\2\\3</u></a>\\4",add_http($str)); } Das macht bei mailto keinen Sinn, funktioniert aber trotzdem - andernfalls müßte man in 2 Funktionen splitten. Markus Smigelskis schrieb am Mittwoch, 1. August 2001, 09:48:14: > Moin, > ich habe hier ein Problem. Ich möchte aus z.B. www.xyz.de nen > anklickbaren link machen lassen. Jetzt habe ich in koehntopps FAQ > folgendes gefunden > function replace_uri($str) { > $pattern = > '#(^|[^\"=]{1})(http://|ftp://|mailto:|news:)([^\s<>]+)([\s\n<>]|$)#sm > '; > return preg_replace($pattern,"\\1<a href=\"\\2\\3\">><u>\\2\\3</u></a>\\4",$str); > } > Sieht ja schon ganz gut aus. allerding muß dort immer http:// da vor > stehen. Was leider in den seltesten Texten gegeben ist. > Wie ersetze ich nun mein www.xyz.de duch <a > href="http://www.xyz.de">www.xyz.de</a> und dies so oft wie ich > möchte (sprich es sind Texte wo 10mal ein link drinn steht und dieser > soll dann auch automatisch 10 mal ersetzt werden). > Wenn das ganze dann auch noch wunderbar bei eMail Adressen funktioniert > wäre dies perfekt. > Danke Markus -- Herzlich Werner Stuerenburg _________________________________________________ ISIS Verlag, Teut 3, D-32683 Barntrup-Alverdissen Tel 0(049) 5224-997 407 · Fax 0(049) 5224-997 409 http://pferdezeitung.de
php::bar PHP Wiki - Listenarchive