PHP: Klipp utdraget ditt ved å bruke strrpos

html-kode

Hvis du jobber med PHP og bare vil vise et utdrag fra kildeteksten og kutte det av med et antall tegn, kan utdraget ditt se stygt ut hvis det er gjort midt i strengen. Jeg måtte skrive en funksjon for å gjøre dette i ASP og i ASP.NET som i utgangspunktet syklet fra siste tegn tilbake for å finne den siste plassen og kutte den der. Litt stygg og litt overkill. Du kan faktisk se dette i aksjon hjemme hos meg side der jeg bare gir de første 500 tegnene.

Jeg var fullt forberedt på å utvikle den samme funksjonen med PHP i dag, men fant ut (som vanlig) at PHP hadde en funksjon som allerede gjør det, strrpos.

Den gamle koden tar en delstreng ($ innhold) fra det første tegnet til det maksimale antallet tegn du vil ha ($ maxchars):

$ innhold = substr ($ innhold, 0, $ maxchars); ekko $ innhold;

Den nye koden:

$ innhold = substr ($ innhold, 0, $ maxchars); $ pos = strrpos ($ content, ""); hvis ($ pos> 0) {$ content = substr ($ content, 0, $ pos); } ekko $ innhold;

Så den nye koden kutter først innholdet ved tegngrensen du leter etter. Det neste trinnet er imidlertid å se etter den siste plassen (”“) i innholdet. $ pos vil ende opp som den stillingen. Nå sørger jeg bare for at det faktisk er plass i innholdet ved å spørre om $ pos> 0. Hvis det ikke er det, vil det bare kutte innholdet med antall tegn jeg har bedt om. Hvis det er noe plass, vil det skjære innholdet mitt på plassen.

Dette er en fin måte å bruke kombinasjonen av maksimalt antall tegn og kutte den av ved ordet. Håper du liker!

Og jeg er sikker på at jeg vil finne ut om det er en ASP.NET-funksjon som gjør dette ... Jeg kunne ikke finne en.

7 Kommentarer

  1. 1
  2. 2
  3. 3
  4. 4

    Hvis $content i utgangspunktet er KORTERE enn $maxchars, vil koden som skrevet fortsatt se høyre mot venstre for et mellomrom og kutte ut det siste ordet. Du kan enten sette sammen et mellomrom på slutten av $content, eller gjøre en if (strlen()...)

  5. 5

    Dette så ut til å fungere som en funksjon (til forrige kommentar):

    function showexcerpt($content, $maxchars) {

    if (strlen($content) > $maxchars) {

    $innhold= substr($innhold, 0, $makstegn);
    $pos = strrpos($innhold, " ");

    if ($pos>0) {
    $innhold = substr($innhold, 0, $pos);
    }

    returner $innhold . "...";

    } Else {

    returnere $ content;

    }

    }

  6. 6

    Hva om det siste tegnet vårt er et skilletegn som et punktum, utropstegn eller spørsmålstegn? Dessverre vil denne koden slette hele ordet foran nevnte tegnsettingstegn.  

    Jeg tror du bør skrive noe litt mer robust.

  7. 7

Hva tror du?

Dette nettstedet bruker Akismet for å redusere spam. Lær hvordan kommentaren din behandles.