/ Forside / Teknologi / Udvikling / PHP / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
PHP
#NavnPoint
rfh 3959
natmaden 3372
poul_from 3310
funbreak 2700
stone47 2230
Jin2k 1960
Angband 1743
Bjerner 1249
refi 1185
10  Interkril.. 1146
autolinks
Fra : Leonard


Dato : 04-11-05 18:45

Jeg bruger denne kode til at ændre links i en tekst til aktive links i
html:

   $tekst =
ereg_replace("((f|ht){1}tp://[a-zA-Z0-9@:%_.~#/?&-]+[a-zA-Z0-9/])",
"<a href=\"\\1\">\\1</a>",
                   $tekst);
   $tekst =
ereg_replace("(www[a-zA-Z0-9@:%_.~#/?&-]+[a-zA-Z0-9/])",
"<a href=\"http://\\1\">\\1",
$tekst);
   $tekst =
ereg_replace("([a-zA-Z0-9._-]+@[a-zA-Z0-9._-]+\.[a-zA-Z0-9._-]+[a-zA-Z0-9/])",
"<a href=\"mailto:\\1\">\\1</a>",
$tekst);

Problemet er at http://www.leonard.dk bliver fanget 2 gange og så ser
det skørt ud. Jeg kan ikke regne ud hvordan jeg kan ændre det til at
fange både http://leonard.dk og www.leonard.dk uden at lave ged i
http://www.leonard.dk

--
mvh Leonard
Har du kigget på: http://dk.php.net/ el. http://www.webcafe.dk/

 
 
Kasper Johansen (06-11-2005)
Kommentar
Fra : Kasper Johansen


Dato : 06-11-05 19:24

"Leonard" <usenet@leonard.dk> skrev i en meddelelse
news:4a7nm1t8ibj2bovejv7tpeg4t37jlvr3o6@4ax.com...
> Problemet er at http://www.leonard.dk bliver fanget 2 gange og så ser
> det skørt ud. Jeg kan ikke regne ud hvordan jeg kan ændre det til at
> fange både http://leonard.dk og www.leonard.dk uden at lave ged i
> http://www.leonard.dk

Jeg har selv skrevet, og bruger selv, dette script til at omskrive links.
Det er dog delvist PHP/regex.

Scriptet fanger alle links og afkorter dem hvis de er for lange (så de ikke
ødelægger mit grafiske design). Den prøver desuden at lægge mærke til om det
står i parantes eller i slutningen af en sætning (så et punktum, komme eller
slutparantes ikke tages med).

Scriptet ser således ud:

<?
function links_parse($besked, $maxlength = false){
$signs[] = ".";
$signs[] = ")";
$signs[] = ",";

if
(preg_match_all("/(www\.|http:\/\/|ftp:\/\/)(www\.|)([\w-]*)[\.]([\w]{2,3})?[\S-]*[a-zA-Z0-9]/",
$besked, $matches)){
foreach($matches[0] AS $key => $match){
if (strtolower($matches[1][$key]) == "www."){
$in_link = "http://" . $match;
}else{
$in_link = $match;
}

$lastsign = substr($in_link, -1, 1);

foreach($signs AS $sign){
if ($lastsign == $sign){
$forsign = true;
$forsign_sign = $lastsign;
$in_link = substr($in_link, 0, -1);
}
}

if ($maxlength && strlen($match) > $maxlength){
$in_title = $match;
$in_title = substr($in_title, 0, ($maxlength - 2)) . "...";

$in_return = "<a target=\"_blank\" href=\"" . $in_link . "\">" .
$in_title . "</a>";
}else{
if ($forsign == true){
$in_title = substr($match, 0, -1);
}else{
$in_title = $match;
}

$in_return = "<a target=\"_blank\" href=\"" . $in_link . "\">" .
$in_title . "</a>";

if ($forsign == true){
$in_return .= $forsign_sign;
}
}

$replaces[$match] = $in_return;
}

$besked = strtr($besked, $replaces);
}

return $besked;
}
?>


Løsningen i regex ville være at lave en mulighed for ingenting, eller
"http://" foran.

Altså:
(|http://)


Læg mærke til "|" som betyder "eller". Det vil sige på den ene side er den
ene mulighed (i dette tilfælde ingenting) og på den anden side er "http://".
Så vil dit regex også fange "http://".

--
Mvh Kasper Johansen



Leonard (09-11-2005)
Kommentar
Fra : Leonard


Dato : 09-11-05 16:55

"Kasper Johansen" <kasper@johansen.tdcadsl.dk> wrote:

>Løsningen i regex ville være at lave en mulighed for ingenting, eller
>"http://" foran.

$tekst =
ereg_replace("(((f|ht){1}tp://|www)[a-zA-Z0-9@:%_.~#/?&-]+[a-zA-Z0-9/])",
"<a href=\"\\1\">\\1</a>",
                   $tekst);
Den her fanger fint både ftp://leonard.dk http://leonard.dk og
www.leonard.dk samt http://www.leonard.dk men den skriver ikke http://
først i href=" ved www.leonard.dk og så virker linket jo ikke som et
eksternt link.
Hvordan får jeg den til at indsætte ftp:// eller http:// hvis ingen af
dem er der og kun da?

--
mvh Leonard
Har du kigget på: http://dk.php.net/ el. http://www.webcafe.dk/

Søg
Reklame
Statistik
Spørgsmål : 177552
Tips : 31968
Nyheder : 719565
Indlæg : 6408847
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste