Avatar billede storkie Nybegynder
24. juli 2007 - 15:35 Der er 9 kommentarer og
1 løsning

Lav til link og afkort dette

Hej.

Jeg bruger følgende kode til at lave links i en post om til klikbare links.

Problemet er bare, at de nogen gange lige bliver store nok.

Her er koden, som jeg har forsøgt at benytte.

<?
$row_thread[post_Text] = "http://www.gadgets.dk/product_info_products_id-968.html";

$row_thread[post_Text] = eregi_replace("([[:space:]{()\"'\[~#=;\&?\_-])((ftp|http|https|telnet|news|nttp|nntp|file):\/\/[a-z0-9~#%@\&\(\):;=\?\/\.,_-]+(\\[|\\]|[a-z0-9~#%@\&:;,=\?\/_\+-])+)", substr("\\2",0, 20), $row_thread[post_Text]);
    $row_thread[post_Text] = eregi_replace("([[:space:]{()\"'\[~#=;\&?\_-])(www\.[a-z0-9~#%@\&\(\):;=\?\/\.,_-]+[a-z0-9~#%@\&:;,=\?\/_\+-]+)", substr("\\2",0, 20), $row_thread[post_Text]);
    $row_thread[post_Text] = eregi_replace("([_\.0-9a-z-]+@([0-9a-z-]+)+\.[a-z]{2,4})",substr("\\1",0, 20), $row_thread[post_Text]);
 
echo $row_thread[post_Text];
?>

Den forkorter bare ikke, da den tror, at det er \1 eller \2, som den skal forkorte. Hvordan skal kan man gøre, så det er selve linket, som bliver forkortet samtidig med, at det bliver lavet til et link?
Avatar billede coderdk Praktikant
24. juli 2007 - 17:15 #1
$row_thread[post_Text] = eregi_replace("([_\.0-9a-z-]+@([0-9a-z-]+)+\.[a-z]{2,4})",substr("\\1",0, 20), $row_thread[post_Text]);

skal vel bare være:

$row_thread[post_Text] = eregi_replace("([_\.0-9a-z-]+@([0-9a-z-]+)+\.[a-z]{2,4})","\\1", $row_thread[post_Text]);
$row_thread[post_Text] = substr($row_thread[post_Text], 0, 20);

?
I øvrigt bør du bruge preg_replace i stedet, da den er hurtigere og rent faktisk vil eksistere i fremtidige PHP-versioner (ereg ryger ud)...

Med preg kunne man give den /e modifieren, og så ville du kunne få den til at eksekvere kode i din replace (som jo er det du vil)...
Avatar billede storkie Nybegynder
24. juli 2007 - 17:42 #2
Kan du prøve at vise et eksempel med preg_replace?
Avatar billede coderdk Praktikant
24. juli 2007 - 17:49 #3
$row_thread['post_Text'] = preg_replace("/([_\.0-9a-z-]+@([0-9a-z-]+)+\.[a-z]{2,6})/i","substr('\\1')", $row_thread['post_Text']);

Ca. (utestet)
Avatar billede coderdk Praktikant
24. juli 2007 - 17:50 #4
Ja ok

$row_thread['post_Text'] = preg_replace("/([_\.0-9a-z-]+@([0-9a-z-]+)+\.[a-z]{2,6})/i","substr('\\1',0,20)", $row_thread['post_Text']);
Avatar billede storkie Nybegynder
24. juli 2007 - 18:08 #5
Virker stadig ikke. Den afkorter ikke linket :S

Her er koden:
<?
$row_thread[post_Text] = " http://www.gadgets.dk/product_info_products_id-968.html  ";

$row_thread[post_Text] = preg_replace("/([[:space:]{()\"'\[~#=;\&?\_-])((ftp|http|https|telnet|news|nttp|nntp|file):\/\/[a-z0-9~#%@\&\(\):;=\?\/\.,_-]+(\\[|\\]|[a-z0-9~#%@\&:;,=\?\/_\+-])+)/i", substr('\\2',0, 20), $row_thread[post_Text]);
    $row_thread[post_Text] = preg_replace("/([[:space:]{()\"'\[~#=;\&?\_-])(www\.[a-z0-9~#%@\&\(\):;=\?\/\.,_-]+[a-z0-9~#%@\&:;,=\?\/_\+-]+)/i", substr('\\2',0, 20), $row_thread[post_Text]);
    $row_thread[post_Text] = preg_replace("/([_\.0-9a-z-]+@([0-9a-z-]+)+\.[a-z]{2,6})/i",substr('\\1',0,20), $row_thread['post_Text']);
echo $row_thread[post_Text];

?>
Avatar billede coderdk Praktikant
24. juli 2007 - 18:22 #6
Den klipper jo blot linket - Er du sikker på at du ikke vil lave et HTML-link og klippe de viste, som f.eks. sådan:

function url2link($txt)
{
    $username = "[a-z0-9_\-+]+";
    $password = "[a-z0-9_\-+!#]+";
    $host = "[a-z0-9\-]+\.[a-z0-9\-\.]+";
    $port = "\d{1,6}";
    $path = "\/[a-z0-9\/\-_\.\(\)\%#]*";
    $querystr = "\?[a-z0-9&=\-_\.%\(\)#]+";
    $proto = "(https?|ftp):\/\/";
    $url = "$host(:$port)?($path($querystr)?)?";
    $protodomain = "/$proto(($username(:$password)?@)?$url)/ie";
    $domain = "/(^| )(www\.$url)/ime";
    $protomail = "/mailto:($username@$host)/ie";
    $mail = "/(^| )($username@$host)/ime";
    $replacements = array(
            $protodomain => "'<a href=\"\\0\" target=\"_blank\">'.substr('\\2',0,20).'</a>'"
            ,$domain => "'\\1<a href=\"http://\\2\" target=\"_blank\">'.substr('\\2',0,20).'</a>'"
            ,$protomail => "'<a href=\"\\0\">'.substr('\\1',0,20).'</a>'"
            ,$mail => "'\\1<a href=\"mailto:\\2\">'.substr('\\2',0,20).'</a>'"
        );
    return preg_replace( array_keys( $replacements ), array_values( $replacements ), $txt );
}

$row_thread['post_Text'] = "http://www.gadgets.dk/product_info_products_id-968.html";
echo url2link( $row_thread['post_Text'] );
Avatar billede storkie Nybegynder
24. juli 2007 - 18:26 #7
Præcis det jeg mente. Tak skal du have. Smid et svar, så får du point.
Avatar billede coderdk Praktikant
24. juli 2007 - 19:06 #8
Ok :)
Avatar billede storkie Nybegynder
24. juli 2007 - 19:12 #9
Sådan. Tak for hjælpen.
Avatar billede coderdk Praktikant
24. juli 2007 - 19:21 #10
Selv tak :) Og tak for point.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester