Link anzeigen

nordi

Erfahrenes Mitglied
Hi,

hab ne Shoutbox auf meiner Seite. Wenn jemand einen Link posten will, der etwas länger ist, wie zB. "http://www.dieserlinkistextremlangodernicht.de/mitwurstundhans.htm" sprengt dieser den Rahmen der Shoutbox. Wollte das mit "preg_replace" machen. Bekomm das aber irgendwie nicht hin. Anstelle des ganzen Links (s.o) soll nur das Wort "LINK" stehen.

Hier mein Code:

Code:
// URLS in HRC umwandeln:
   $post=eregi_replace("([ \r\n])http://([^ ,\r\n]*)","\\1[ url]http://\\2[ /url]",$post);
   $post=eregi_replace("([ \r\n])[ url]https://([ /url][^ ,\r\n]*)","\\1[ url]https://\\2[ /url]",$post);
   $post=eregi_replace("([ \r\n])[ url]ftp://([ /url][^ ,\r\n]*)","\\1[ url]ftp://\\2[ /url]",$post);
   $post=eregi_replace("([ \r\n])www\\.([^ ,\r\n]*)","\\1[ url]http://www.\\2[ /url]",$post);

   $post=eregi_replace("^[ url]http://([ /url][^ ,\r\n]*)","[ url]http://\\1[ /url]",$post);
   $post=eregi_replace("^[ url]https://([ /url][^ ,\r\n]*)","[ url]https://\\1[ /url]",$post);
   $post=eregi_replace("^[ url]ftp://([ /url][^ ,\r\n]*)","[ url]ftp://\\1[ /url]",$post);
   $post=eregi_replace("^www\\.([^ ,\r\n]*)","[ url]http://www.\\1[ /url]",$post);

//URLS AUSGEBEN
   $post=preg_replace("/\[url\]www.(.*)\[\/url\]/iUms","<a href=\"http://www.\\1\" target=_blank>http://www.\\1</a>",$post);
   $post=preg_replace("/\[url\](.*)\[\/url\]/iUms","<a href=\"\\1\" target=_blank>\\1</a>",$post);
 
Hier mal eine einfache Funktion die sich sicherlich weiter ausbauen lässt:
PHP:
    function shortenLink($link, $maxsize) {
		if(strlen($link) > $maxsize) {
			$link = substr($link, 0, $maxsize - 3);
			$link .= "…";
		}
		return $link;
	}

	$link = "http://www.das-ist-eine-ewig-lange-adresse.de/die-is-so-lang-das-man-sie-garnich-mag";

	echo '<a href="'.$link.'">'.shortenLink($link, 20).'</a>';
        // Ergebnis: http://www.das-is...
greetz
daddz
 
Hey,

sorry, dass ich so lange nicht auf den Thread geantwortet habe! Wo soll ich denn da die Funktion einbauen? Ich habe ja kein direktes Feld, wo der User den "Link ($link)" eingibt, sondern die werden automatisch erkannt, wenn jemand www. oder http:// eingibt, werden die direkt ins einen Hyperlink umgewandelt.

Wäre nett, wenn du mir "kurz" helfen könntest ;)

Marius
 
Wie markier ich den Hyperlink als $link, damit die Funktion greift? Ich bekomm das einfach nicht hin!
 
Probier mal Folgendes:
PHP:
<?php

	function foobar( $url )
	{
		return '[ url]' . str_replace('http://http://', 'http://', 'http://'.$url) . '[ /url]';
	}

	$urlPatterns = array(
		// @link   <url:http://www.foad.org/~abigail/Perl/url2.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'    => "(?:[ url]ftp://(?:(?:(?:(?:(?:[ /url][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 = '<(' . $urlPatterns['http'] . '|' . $urlPatterns['ftp'] . '|' . $urlPatterns['mailto'] . ')>';


	$string = preg_replace($pattern, 'foobar("\1")', $string);
	$string = preg_replace('<\[url\](.+?)\[/url\]>iUms', '<a href="\1">\1</a>', $string);

?>
 
Zurück