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