phpbar.de logo

Mailinglisten-Archive

[php] Link als link ersetzen

[php] Link als link ersetzen

Werner Stuerenburg php_(at)_phpcenter.de
Wed, 1 Aug 2001 10:35:05 +0200


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