30. oktober 2004 - 17:16
#2
Du kan i PHP bare skrive
echo substr($text, 0, 200) . "... [Læs Mere]";
30. oktober 2004 - 23:17
#7
svarene er sådan set rigtige, men kan ikke bruges hvis teksten indeholder links, for så er der risiko man at bryde teksten midt i <a href = "linkfil.php" titl [læs mere...]
det vil betyde at resten af siden også er indgår i linken til der et andet sted kommer en </a>
mvh Folmer
30. oktober 2004 - 23:36
#8
fandt lige nogle funktioner jeg bruger til at afkorte lange tekster der kan indeholde links, og som laver afkortningen lige efter en evt. link.
Det kompenserer også for om eksempelvis 60 tegn af de 200 tegn man vil vise er kode til links tidligere i teksten, så lægges der 60 tegn til 200.
Der toges også højde for at teksten kan inde holde æ, ø eller å i stedet for æ, ø og å, for så vil der også gå kage i det ved deling midt i disse.
// funktioner til afkortning af tekst...
function lav_aeoeaa($str) { // laver specialtegn om til æøå
$search = array ("'æ'si", "'ø'si", "'å'si", "'ö'si", "'Æ'si", "'Ø'si", "'Å'si", "'Ö'si");
$replace = array ("æ","ø","å","ö","Æ","Ø","Å","Ö");
$str = preg_replace ($search, $replace, $str);
return $str;
}
function afkort_leangde($tekst,$laengde) {
$tekst = "start " . $tekst; // vi sætter "start " foran for at kunne kende starten, selvom teksten måske starter med en link
preg_match_all("/<A HREF=(['\"])(.*?)\\1>/is", $tekst, $matches); // finder links og smider dem i arrayet $matches
$links = $matches[0]; //arrayet $matches[0] indeholder hele links
if (is_array($links)){
$antal = count($links);
for ($i=0;$i<$antal;$i++){
$splittekst = split($links[$i], $tekst);
$link_start = strlen($splittekst[0])-6; // vi regner længden ud før linken, og vi trækker 6 tegn fra for "start " som vi indsatte først i teksten
$link_str = strlen($links[$i]);
$gl_akkumuleret_link_str = $akkumuleret_link_str; // vi måler længden af tidligere links i teksten og lægger det til den ønskede længde
$akkumuleret_link_str = $akkumuleret_link_str+$link_str;
$link_slut = $link_start+$link_str;
if ($laengde > ($link_start-1) && $laengde < ($link_slut+1)){
$laengde = $link_slut; // vi trækker 6 tegn fra for "start " som vi indsatte først i teksten
}
}
}
return $laengde;
}
function afkort_langtekst($tekst, $laengde) {
// Vi afkorter teksten hvis den er lang, og sætter "..." bagefter.
$tekst = lav_aeoeaa($tekst); // laver specialtegn om til æøå
$laengde = afkort_leangde($tekst, $laengde); // vi checker at vi ikke bryder ind i nogle links
if (strlen($tekst) > $laengde) {
$tekst = substr($tekst, 0, strpos($tekst, " ", $laengde)); // afkort ved første mellemrum efter
$tekst = $tekst . "...";
}
return $tekst;
}
det er nok at kalde den nederste funktion med
$tekst = "din lange tekst der evt. indeholder både links og specialtegn";
$laengde = 200;
afkort_langtekst($tekst, $laengde);
31. oktober 2004 - 12:39
#9
fojensen, tak for din hjælp. men kan ikke rigtig se nogen sammenhæng i det php crap du har skrevet... Bruger bare den anden funktion. Der kommer nemlig ikke til at være links midt i det hele!
31. oktober 2004 - 17:01
#10
fint med mig...
Hvis du selv er herre over om teksterne indeholder links eller specialtegn, så kan du roligt bruge de svar, som du jo også har accepteret.
mvh. Folmer