Avatar billede angelenglen Nybegynder
05. august 2003 - 18:43 Der er 15 kommentarer og
1 løsning

forkort indhold efter antal ord.

lige nu, har jeg en lille news-parser på min forside, hvor jeg bruger følgende kode til at korte den af efter 200 bogstaver.

##################################

$content    = stripslashes($list->content);

        if (strlen($content) > 200) {
            $content = substr($content, 0, 200) . "...";
        } else {
            $content = $content;
        }

$content    = nl2br($content);

##################################


men det resulterer i at den tit kapper et ord over...

er der ikke en måde at få den til at forkorte efter et vist antal ord istedet ?
-fx noget med at få den til at tælle spaces? - den skal naturligvis stadig tilføge de 3 ... :)
Avatar billede ahv Nybegynder
05. august 2003 - 19:01 #1
Avatar billede ahv Nybegynder
05. august 2003 - 19:02 #2
<?php
$short = substr($content, 0, 100); // Tager de første 100 tegn af strengen
$pos = strrpos($short, ' '); // Finder positionen for det sidste mellemrum i teksten
$short = substr($short, 0, $pos); // Vi giver $pos som 3. argument til subtr() som returnerer op til 100 tegn - indtil sidste punktum

$content = nl2br($short);
?>
Avatar billede exp Juniormester
05. august 2003 - 19:03 #3
ahv >>
Den havde jeg også oprindelig fundet frem, men den cutter jo bare efter x antal tegn - den skal cutte efter x antal _ord_
Avatar billede exp Juniormester
05. august 2003 - 19:04 #4
okay, jeg bøjer mig :-)
Avatar billede tipsen Nybegynder
05. august 2003 - 19:09 #5
Og hvis man alligevel ikke skal bruge hele teksten til noget, så nøjes da med at pille det ud af mysql-db'en som man skal bruge - man behøver jo ikke belaste serveren, hvis man kan lade være...
Avatar billede ahv Nybegynder
05. august 2003 - 19:18 #6
tipsen -> Den skal sgu da lærer hvem der bestemmer ;o)

Ej, hvis teksten kommer fra databasen, kan du lige så godt cutte den der, hvordan det gøres kan også ses det nævnte link.
Avatar billede angelenglen Nybegynder
05. august 2003 - 19:19 #7
ahv: det ser meget spænnende ud, jeg checker det ud, og vender tilbage.

tipsen: det et rigtigt, hvis du kan lave noget der kan evaluere indholdet inden det bliver trukket ud på den måde, bliver jeg også glad :)
Avatar billede ahv Nybegynder
05. august 2003 - 19:21 #8
Englen -> Du ville få meget ud af at klikke dig ind på det nævnte link ->
http://delfs.dk/articles/danish/Start_af_tekst.php

Der er også den løsning tipsen kom med.
Avatar billede googolplex Novice
05. august 2003 - 19:37 #9
En god funktion som jeg selv bruger, den klipper ikke bare ord over:

function klip($tekst, $laengde = 10, $tolerance = 10) {
   
    $punktum = strpos(substr($tekst, $laengde - $tolerance, 2*$tolerance), "."); /* position af punktum */
    $mellemrum = strpos(substr($tekst, $laengde - $tolerance, 2*$tolerance), " "); /* position af mellemrum */
    $endelse = "..."; /* punktummer hvis mere tekst */

    if (strlen($tekst) <= $laengde + $tolerance) {
        $slut_pos = strlen($tekst); /* slutposition = slut på tekst, da denne er kortere end $laengde + $tolerance */
        $endelse = ""; /* ikke nogen endelse */
    } elseif ($punktum !== false) {
        $slut_pos = $laengde - $tolerance + $punktum; /* slutposition = punktum */
    } elseif ($mellemrum !== false) {
        $slut_pos = $laengde - $tolerance + $mellemrum; /* slutposition = mellemrum */
    } else {
        $slut_pos = $laengde; /* slutposition $laengde (ikke noget at gøre - klip ord over) */
    }

    $klippet_tekst = substr($tekst, 0, $slut_pos) . $endelse; /* udskriv del + evt. punktummer */

    return $klippet_tekst;
}
Avatar billede ahv Nybegynder
05. august 2003 - 19:42 #10
googolplex -> Det gør den jeg postede tidligere heller ikke ->

<?php
$short = substr($content, 0, 100); // Tager de første 100 tegn af strengen
$pos = strrpos($short, ' '); // Finder positionen for det sidste mellemrum i teksten
$short = substr($short, 0, $pos); // Vi giver $pos som 3. argument til subtr() som returnerer op til 100 tegn - indtil sidste punktum

$content = nl2br($short);
?>

Og den ser lidt nemmere ud end din synes jeg :o)
Avatar billede googolplex Novice
05. august 2003 - 19:59 #11
Ja, men jeg tror min er lidt mere avanceret, med tolerance osv :-P
Avatar billede angelenglen Nybegynder
05. august 2003 - 20:08 #12
tror jeg holder mig til ahv's - den forstår jeg i det mindste hvad gør :)
Avatar billede tipsen Nybegynder
05. august 2003 - 20:10 #13
googol: Den funktion har efterhånden floreret i lang tid her på Eksperten - tror det er over et år siden jeg så den første gang.
Avatar billede googolplex Novice
05. august 2003 - 20:15 #14
Ok, men det er vel relativt ligegyldigt, den virker jo fint ?
Avatar billede tipsen Nybegynder
05. august 2003 - 20:39 #15
goo: Det var heller ikke negativt ment - synes bare det er sjovt :-)
Avatar billede googolplex Novice
05. august 2003 - 21:39 #16
Ja, har også selv fundet den her på sitet :-)
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