30. oktober 2004 - 17:07Der er
8 kommentarer og 2 løsninger
Max antal tegn
Hvordan kan man gøre så den tekst der bliver vist fra ens mysql tabel kun er på 200 tegn og er efterfulgt af ... [Læs mere] Hvor man så kan klikke sig ing og læse hele teksten?!
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>
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.
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);
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!
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
Synes godt om
Ny brugerNybegynder
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.