URL klickbar machen und kürzen

deb_ugger

Erfahrenes Mitglied
Hallo!

Ich habe da folgendes Problem: Ich möchte eine von einem Benutzer gepostete URL klickbar machen. Sollte die URL > 30 Zeichen haben, sollte sie gekürzt werden.

An sich funktioniert das Script, es wird auch eine Unterfunktion trimLinks() aufgerufen, jedoch funktioniert dort das substr nicht. Keine Ahnung warum. Kann mir da jemand weiterhelfen? Danke!

PHP:
<?php
function trimLinks($url) {
	$shorturl = $url;
	if(strlen($url)>30) {
		$shorturl = substr($url, 0, 30);
	}
	return "<i>".$shorturl."</i>";
}

function makeClickableLinks($text) {
	$text = eregi_replace('(((f|ht){1}tp://)[-a-zA-Z0-9@:%_\+.~#?&//=]+)','<a href="\\1">'.trimLinks("\\1").'</a>', $text);
	$text = eregi_replace('([[:space:]()[{}])(www.[-a-zA-Z0-9@:%_\+.~#?&//=]+)','\\1<a href="http://\\2">'.trimLinks("\\2").'</a>', $text); // \\2
	$text = eregi_replace('([_\.0-9a-z-]+@([0-9a-z][0-9a-z-]+\.)+[a-z]{2,3})','<a href="mailto:\\1">\\1</a>', $text); 
	return $text;
}

echo makeClickableLinks("<strong>X</strong>Das ist ein Testtext www.heise.de/newsticker/foren/S-Wem-ist-auch-aufgefallen/forum-135972/msg-14775905/read/<br /> dazwischen wieder ein weiterer text eine.email@domain.com und noch wein wenig Text...");
?>
 
Hallo,

sieht Ok aus. Substr ist definitv richtig. Evtl scheitert die If-Abfrage, hast das mal getestet?
MFG, xErY
 
Die If-Abfrage funktioniert. Hab sie testweise auch mal weggelassen. Passiert dennoch nichts. Die Funktion trimLinks() wird zwar aufgerufen (weil auch der Link dann in <i>....</i> augegeben wird), aber das substr wird ignoriert.

Ruf ich trimLinks() direkt auf, funktioniert substr.
 
Die Funktion ist schon richtig, nur wird der falsche Wert übermittelt. Probier mal Folgendes:
PHP:
function makeClickableLinks($text)
{
	$text = preg_replace('/(?:(?:f|ht)tp:\/\/)[-a-zA-Z0-9@:%_\+.~#?&\/=]+/e', '"<a href=\"\\1\">".trimLinks("\\0")."</a>"', $text);
	$text = preg_replace('/(?<=[[:space:]])www\.[-a-zA-Z0-9@:%_\+.~#?&\/=]+/e','"<a href=\"http://\\0\">".trimLinks("\\0")."</a>"', $text);
	$text = preg_replace('/[_\.0-9a-z-]+@(?:[0-9a-z][0-9a-z-]+\.)+[a-z]{2,3}/', '<a href="mailto:\\1">\\1</a>', $text);
	return $text;
}
 
Hey. Super. Damit funktioniert das schon wesentlich besser! Komischerweise werden aber emails im text nicht mehr erkannt. Und beginnt der String mit www. (ohne http://) wird das auch nicht erkannt (?)
 
Hallo!

Also ich habs jetzt auch geschafft, die Mail anklickbar zu machen. Was noch nicht funktioniert: Wenn der string mit "www." anfängt, wird er nicht als link erkannt. Irgendwelche Vorschläge?

Hier der bisherige Code:
PHP:
function trimLinks($url) {
	$shorturl = $url;
	if(strlen($url)>30) {
		$shorturl = substr($url, 0, 20)."...";
	}
	return $shorturl;
}

function makeClickableLinks($text)
{
	$text = preg_replace('/(?:(?:f|ht)tp:\/\/)[-a-zA-Z0-9@:%_\+.~#?&\/=]+/e', '"<a href=\"\\1\">".trimLinks("\\0")."</a>"', $text);
	$text = preg_replace('/(?<=[[:space:]])www\.[-a-zA-Z0-9@:%_\+.~#?&\/=]+/e','"<a href=\"http://\\0\">".trimLinks("\\0")."</a>"', $text);
	$text = preg_replace('/[a-z0-9_-]+(\.[a-z0-9_-]+)*@([0-9a-z][0-9a-z-]*[0-9a-z]\.)+([a-z]{2,4}|museum)/i', '<a href="mailto:\\0">\\0</a>', $text);
	return $text;	
}

echo makeClickableLinks("www.heise.de/newsticker/foren/S-Wem-ist-auch-aufgefallen/forum-135972/msg-14775905/read/<br /> dazwischen wieder ein weiterer text eine.email@domain.com und noch wein wenig Text");
 
Zurück