[PHP] Link erkennen und klickbar machen...?

smaak

Well-known member
7 Mai 2006
2.811
357
Mahlzeit!

Ich bastel gerade an unserer firmeninternen Kommunikations und Planungsoberfläche und hab aus Jux mal ein kleines Script reingebastelt mit welchen man lutige Links austauschen kann. Funktioniert auch eins A, allerdings werden die Links als normaler Text ausgegeben und halt nicht als klickbarer Link. Habt Ihr da eine Idee wie ich das bewerkstelligen könnte? Hier mal ein Ausschnitt aus dem Code:

PHP:
$chat_file_ok = "links.txt";
$chat_lenght = 7;
$max_single_msg_lenght = 512;
$max_file_size = $chat_lenght * $max_single_msg_lenght;
$file_size= filesize($chat_file_ok);            
if ($file_size > $max_file_size) {
$lines = file($chat_file_ok);    
$a = count($lines);
$u = $a - $chat_lenght;
for($i = $a; $i >= $u ;$i--){
        $msg_old =  $lines[$i] . $msg_old;
    }
$deleted = unlink($chat_file_ok);
$fp = fopen($chat_file_ok, "a+");
$fw = fwrite($fp, $msg_old);
fclose($fp);
}
$msg = str_replace ("\n"," ", $message);
$msg = str_replace ("\n"," ", $message);
$msg = str_replace ("<", " ", $msg);
$msg = str_replace (">", " ", $msg);
$msg = stripslashes ($msg);
if ($msg != ""){
$fp = fopen($chat_file_ok, "a+");
$fw = fwrite($fp, "\n<b>$person :</b> $msg");
fclose($fp);
}
$lines = file($chat_file_ok);
$a = count($lines);
$u = $a - $chat_lenght;
for($i = $a; $i >= $u ;$i--){
        echo $lines[$i] . "<br>";
    }

Habt Ihr eine Idee?
 
Nach dem Entfernen der spitzen Klammern geh einfach mit RegExp ran und lass alle Textstellen, die einer URL matchen, durch einen entsprechenden Link ersetzen.

Kriegst du den RegExp nicht selber hin, google einfach nach "regulärer Ausdruck URL Link" (oder sowas in der Art), da solltest du genügend finden :)
 
Moin moin!

Wie weit sollte ich denn mit folgendem Code kommen:

PHP:
$url_patterns = array(
        // @link    https://internet.ls-la.net/folklore/url-regexpr.html
        'http'        => "(?:https?://(?:(?:(?:(?:(?:[a-zA-Z\d](?:(?:[a-zA-Z\d]|-)*[a-zA-Z\d])?)\.)*(?:[a-zA-Z](?:(?:[a-zA-Z\d]|-)*[a-zA-Z\d])?))|(?:(?:\d+)(?:\.(?:\d+)){3}))(?::(?:\d+))?)(?:/(?:(?:(?:(?:[a-zA-Z\d$\-_.+!*'(),]|(?:%[a-fA-F\d]{2}))|[;:@&=])*)(?:/(?:(?:(?:[a-zA-Z\d$\-_.+!*'(),]|(?:%[a-fA-F\d]{2}))|[;:@&=])*))*)(?:\?(?:(?:(?:[a-zA-Z\d$\-_.+!*'(),]|(?:%[a-fA-F\d]{2}))|[;:@&=])*))?)?)",
        'ftp'        => "(?:ftp://(?:(?:(?:(?:(?:[a-zA-Z\d$\-_.+!*'(),]|(?:%[a-fA-F\d]{2}))|[;?&=])*)(?::(?:(?:(?:[a-zA-Z\d$\-_.+!*'(),]|(?:%[a-fA-F\d]{2}))|[;?&=])*))?@)?(?:(?:(?:(?:(?:[a-zA-Z\d](?:(?:[a-zA-Z\d]|-)*[a-zA-Z\d])?)\.)*(?:[a-zA-Z](?:(?:[a-zA-Z\d]|-)*[a-zA-Z\d])?))|(?:(?:\d+)(?:\.(?:\d+)){3}))(?::(?:\d+))?))(?:/(?:(?:(?:(?:[a-zA-Z\d$\-_.+!*'(),]|(?:%[a-fA-F\d]{2}))|[?:@&=])*)(?:/(?:(?:(?:[a-zA-Z\d$\-_.+!*'(),]|(?:%[a-fA-F\d]{2}))|[?:@&=])*))*)(?:;type=[AIDaid])?)?)",
        'mailto'    => "(?:mailto:(?:(?:[a-zA-Z\d$\-_.+!*'(),;/?:@&=]|(?:%[a-fA-F\d]{2}))+))"
    );

    $pattern = '/(' . addcslashes($url_patterns['http'], chr(0x2F)) . '|' . addcslashes($url_patterns['ftp'], chr(0x2F)) . '|' . addcslashes($url_patterns['mailto'], chr(0x2F)) . ')/';
    $string = preg_replace($pattern, '<a href="\\1">\\1</a>', $string);

Ich hab den mal dazwischen gewurschtelt, aber die Urls lassen sich immer noch nicht klicken. Noch jemand eine Idee?
 
Hat wunderbar geklappt. Eine Frage habe ich dennoch, wie lassen sich die Links in einem neuen Fenster öffnen? Mit folgendem Code klappt es nicht

PHP:
$string = preg_replace($pattern, '<a href="\\1" target="_blank">\\1</a>', $string);
 
Sie öffnen sich immernoch im selben Fesnter! ^^
Ist denn der HTML-Quellcode korrekt, also das target="_blank" dran ? Wenn ja, kannst du nicht mehr tun.

Im Endeffekt entscheidet der Besucher, welchen Link er im neuen Fenster öffnen will und nicht der Webmaster. Die entsprechenden Browser reagieren also durchaus unterschiedlich auf dieses Attribut.
 
Klar entscheidet das der User selber und ich möchte ihn auch nicht zwingen Links in einem neuen Fenster zu öffnen, nur befindet sich dieses Script in unserem Intranet und das hat nicht wirklich jeder gebookmarked. Aus diesem Grund dachte ich, wäre es vllt. von Vorteil wenn sich die Links in einem neuen Fenster öffnen. Nungut, tut der Sache ja keinen Abbruch, ich werde einfach einen kleinen Hinweis drüberschreiben und aus die Maus. :D

Danke an alle!