Peeer Medlem sedan mars 2002 5 907 inlägg Trådstart 7 sep. 2004 20:08 #1 function strLinks($text) {
$text = preg_replace('%(<a\s[^>]+>[url]http://[/url][^\s]+</a>)|(<[^>]+[url]http://[/url][^>]+>)|([url]http://[/url])[^\s]+%ie',
'"$0"=="$1" || "$0"=="$2" ? "$0" : "<a href=\"$0\" rel=\"external\" >$0</a>"', $text);
$text = preg_replace("/\s([w.-_]+)(@)([w.-_]+)(\.)([w.-_]+)/i", "<a href=\"mailto:$0\">$0</a>",$text);
$text = preg_replace('%(<a\s[^>]+>[url]http://[/url]|[url]www.[/url][^\s]+</a>)|(<[^>]+[url]www.[/url][^>]+>)|([url]www.[/url])[^\s]+%ie',
'"$0"=="$1" || "$0"=="$2" ? "$0" : "<a href=\"http://$0\" rel=\"external\">$0</a>"', $text);
return $text;
}
Ovanstående funktion fungerar utmärkt. Den ersätter adresser i strängar med länkar. Nu skulle jag vilja modifiera funktionen så att den fungerar som här på wF. Dvs om länken är längre än X tecken så kortas länken ner. Har gjort diverse försök, men lyckas inte!
ex: http://idg.se/ArticlePages/200409/07/20040907144329_NOK/20040907144329_NOK.dbp.asp
P Pedda Medlem sedan juni 2000 6 031 inlägg Tror att man ska använda funktionen substr().
Men är tyvärr osäker på hur.
kjell Medlem sedan dec. 1999 757 inlägg $url = 'http://www.webforum.nu/showthread.php?threadid=108631&forumid=23';
if (strlen($url) > 55) {
$short_url = substr($url, 0, 35) . '...' . substr($url, -15);
print ("<a href=\"" .$url . "\">" . $short_url . "</a>");
} else {
print ("<a href=\"" .$url . "\">" . $url . "</a>");
}
Peeer Medlem sedan mars 2002 5 907 inlägg Tack, men nej tack
En funktion för att korta ner urlen ska jag nog klara av, det jag främst behöver hjälp med är att få in anropet till funktionen från min funktion.
function strLinks($text) {
$text = preg_replace('%(<a\s[^>]+>[url]http://[/url][^\s]+</a>)|(<[^>]+[url]http://[/url][^>]+>)|([url]http://[/url])[^\s]+%ie',
'"$0"=="$1" || "$0"=="$2" ? "$0" : "<a href=\"$0\" rel=\"external\" >[b]min_funktion($0)[/b]</a>"', $text);
$text = preg_replace("/\s([w.-_]+)(@)([w.-_]+)(\.)([w.-_]+)/i", "<a href=\"mailto:$0\">$0</a>",$text);
$text = preg_replace('%(<a\s[^>]+>[url]http://[/url]|[url]www.[/url][^\s]+</a>)|(<[^>]+[url]www.[/url][^>]+>)|([url]www.[/url])[^\s]+%ie',
'"$0"=="$1" || "$0"=="$2" ? "$0" : "<a href=\"http://$0\" rel=\"external\">[b]min_funktion($0)[/b]</a>"', $text);
return $text;
}
Jag vet att det ska gå att göra något liknande, men det vill sig inte riktigt. Istället för att anropa min_funktion() så skriver den helt enkelt ut texten min_funktion(). :/
S sebbz Medlem sedan juli 2000 297 inlägg Sätt ' . min_funktion($0); . '
Peeer Medlem sedan mars 2002 5 907 inlägg Gick inte det heller tyvärr. Jag har dock kommit lite närmare en lösning nu
function strLinks($text) {
$text = preg_replace('%(<a\s[^>]+>[url]http://[/url][^\s]+</a> )|(<[^>]+[url]http://[/url][^>]+> )|([url]http://[/url])[^\s]+%ie',
'"$0"=="$1" || "$0"=="$2" ? "$0" : "<a href=\"$0\" rel=\"external\" >$0</a>"', $text);
$text = preg_replace("/\s([w.-_]+)(@)([w.-_]+)(\.)([w.-_]+)/i", "<a href=\"mailto:$0\">$0</a>",$text);
$text = preg_replace('%(<a\s[^>]+>[url]http://[/url]|[url]www.[/url][^\s]+</a> )|(<[^>]+[url]www.[/url][^>]+> )|([url]www.[/url])[^\s]+%ie',
'"$0"=="$1" || "$0"=="$2" ? "$0" : "<a href=\"http://$0\" rel=\"external\">[b]".min_funktion($0)."[/b]</a>"', $text);
return $text;
}
function min_funktion($data){
if(strlen($data) > 35)
return substr($data,0,25) . '...' . substr($data,-10);
else
return $data;
}
echo strLinks('foo [url]www.verylongdomainname.se[/url] bar');
Resulterar i
foo <a href="http://www.verylongdomainname.se" rel="external">wwwverylongdomainnamese</a> bar
dvs, någon snor alla punkter i adressen! Vart sjutton försvinner dem?
/r Hmm, min debugger skriver ut små kryptiska felmeddelanden.
Debug session started.
Notice: PHPDocument1(8) : regexp code line 1 - Use of undefined constant www - assumed 'www'
Notice: PHPDocument1(8) : regexp code line 1 - Use of undefined constant verylongdomainname - assumed 'verylongdomainname'
Notice: PHPDocument1(8) : regexp code line 1 - Use of undefined constant se - assumed 'se'
Debug session ended.
Tolka någon?
S sebbz Medlem sedan juli 2000 297 inlägg Matchar inte den sista preg_replace utdata från min_funktion då? Blir helt blind av regexpen.