Avatar billede jakobdo Ekspert
04. april 2005 - 15:23 Der er 1 kommentar og
1 løsning

Link Highlight, Mailto, FTP osv.

Jeg har scriptet herunder.
Det har dog en lille fejl.
Meget lange links.
Nogle som kan lave et lille hack, så links som f.eks. er over fixlongword længden bliver til:

<a href="http://www.laaaaaaaaaangtlink.dk">http://www.laaaaaaa...</a>

function text_format($str, $target="_blank", $css_class="", $fixlongword = 0)
{
    $str = str_replace("&", "&amp;", $str);
    $str = str_replace("<", "&lt;", $str);
    $str = str_replace(">", "&gt;", $str);
    $str = text_url($str, $target, $css_class);
    $str = text_email($str, $css_class);
    $str = text_fix_endchar($str);
    $str = str_replace("  ", "&nbsp; ", $str);
    $str = str_replace("\t", "&nbsp;&nbsp;&nbsp; ", $str);
    $str = str_replace("\r", "", $str);
    $str = str_replace("\n", "<br>", $str);
     
    if ($fixlongword != 0)
        $str = text_fix_longword($str, $fixlongword);
 
    $str = addslashes($str);
 
    return $str;
}


function text_url($str, $target, $css_class)
{
    $ins_str = "";
    if ($css_class)
        $ins_str .= " class=\"".$css_class."\"";
    if ($target)
        $ins_str .= " target=\"".$target."\"";
    $str = text_expand($str);
    $str = preg_replace ("/(ftp|http|https|telnet|news|nntp|file|irc):\/\/([a-z0-9~#%@&:;=!',_æøå\(\)\?\/\.\-\+\[\]\|\*\$\^\{\}]+)/i", "<a href=\"\\1://\\2\"".$ins_str.">\\1://\\2</a>", $str);
    $str = preg_replace ("/(\s|tp\:|\(|\[|\&gt;)(www\.)([a-z0-9~#%@&:;=!',_æøå\(\)\?\/\.\-\+\[\]\|\*\$\^\{\}]+)/i", "\\1<a href=\"http://\\2\\3\"".$ins_str.">\\2\\3</a>", $str);
    $str = preg_replace ("/(\s|tp\:|\(|\[|\&gt;)(ftp\.)([a-z0-9~#%@&:;=!',_æøå\(\)\?\/\.\-\+\[\]\|\*\$\^\{\}]+)/i", "\\1<a href=\"ftp://\\2\\3\"".$ins_str.">\\2\\3</a>", $str);
    return text_reduce($str);
}


function text_email($str, $css_class="")
{
    $ins_class = "";
    if ($css_class)
        $ins_class = " class=\"".$css_class."\"";
    $str = text_expand($str);
    $str = preg_replace ("/([\s\"])([\w\.\-_]+)@([\w\-_]+)\.([\w\.\-_]+)/i", "\\1<a href=\"mailto:\\2@\\3.\\4\"".$ins_class.">\\2@\\3.\\4</a>", $str);
    return text_reduce($str);
}


function text_fix_endchar($str)
{
    $str = preg_replace ("/([\'\"\)\]\.\,\?\!]+)\">/i", "\">", $str);
    $str = preg_replace ("/([\'\"\)\]\.\,\?\!]+)\" (target|class)=\"/i", "\" \\2=\"", $str);
    $str = preg_replace ("/([\'\"\)\]\.\,\?\!]+)<\/a>/i", "</a>\\1", $str);
    return $str;
}

function text_fix_longword($str, $maxlen = 10)
{
    $sw = 0;
    $in_tag = false;
    $str_size = strlen($str);
    $res = "";
 
    for ($i=0; $i<$str_size; $i++)
    {
        if ($str[$i] == '<')
            $in_tag = true;
        else if ($str[$i] == ' ')
            $sw = 0;
     
        if (!$in_tag && (($sw++) > $maxlen))
        {
            $res .= '&shy;';
            $sw = 0;
        }
         
        if ($str[$i] == '>')
            $in_tag = false;
        $res .= $str[$i];
    }
     
    return $res;
}

function text_expand($str)
{
    return " ".$str." ";
}

function text_reduce($str)
{
    return substr($str, 1, -1);
}
Avatar billede jakobdo Ekspert
04. april 2005 - 20:34 #1
Evt nogle som kan lave en bedre løsning?
Avatar billede jakobdo Ekspert
08. april 2005 - 07:34 #2
Lukker
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