Peeer Medlem sedan mars 2002 5 907 inlägg Frågan 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. :l
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? :q
/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.