PHP: Klipp ut ditt utdrag vid ordet med strrpos

html-kod

Om du arbetar med PHP och bara vill visa ett utdrag från din källtext och klippa av det med ett antal tecken, kan ditt utdrag se ful ut om det görs i mitten av strängen. Jag var tvungen att skriva en funktion för att göra detta i ASP och i ASP.NET som i grunden cyklade från det sista tecknet tillbaka för att hitta det sista utrymmet och klippa av det där. Typ av otäck och lite överdriven. Du kan faktiskt se detta i aktion i mitt hem sida där jag bara ger de första 500 tecknen.

Jag var helt beredd att utveckla samma funktion med PHP idag men fann (som vanligt) att PHP hade en funktion som redan gör det, strrpos.

Den gamla koden tar en delsträng ($ innehåll) från det första tecknet till det maximala antalet tecken du vill ha ($ maxchars):

$ content = substr ($ content, 0, $ maxchars); echo $ -innehåll;

Den nya koden:

$ content = substr ($ content, 0, $ maxchars); $ pos = strrpos ($ content, ""); if ($ pos> 0) {$ content = substr ($ content, 0, $ pos); } echo $ content;

Så den nya koden skär först av innehållet vid den teckenbegränsning du letar efter. Nästa steg är dock att leta efter det sista utrymmet (”“) i innehållet. $ pos kommer att hamna i den positionen. Nu ser jag helt enkelt till att det faktiskt finns ett utrymme i innehållet genom att fråga om $ pos> 0. Om det inte finns kommer det bara att klippa av innehållet till det antal tecken jag har begärt. Om det finns något utrymme kommer det elegant att klippa bort mitt innehåll på utrymmet.

Detta är ett trevligt sätt att använda kombinationen av maximalt antal tecken och avskärningen av ordet. Hoppas du gillar!

Och jag är säker på att jag kommer att ta reda på om det finns en ASP.NET-funktion som gör det här ... jag kunde inte hitta en.

7 Kommentarer

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

    Om $ content initialt är KORTARE än $ maxchars, ser koden som skrivet fortfarande från höger till vänster efter ett mellanslag och skär ut det sista ordet. Du kan antingen sammanfoga ett mellanslag i slutet av $ content eller göra en if (strlen () ...)

  5. 5

    Detta verkade fungera som en funktion (adressering av föregående kommentar):

    funktion showexcerpt ($ content, $ maxchars) {

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

    $ content = substr ($ content, 0, $ maxchars);
    $ pos = strrpos ($ content, "");

    om ($ pos> 0) {
    $ innehåll = substr ($ innehåll, 0, $ pos);
    }

    returnera $ innehåll. "...";

    } Else {

    returnera $ content;

    }

    }

  6. 6

    Vad händer om vår sista karaktär är en skiljetecken som punkt, utropstecken eller frågetecken? Tyvärr kommer den här koden att rensa hela ordet före nämnda skiljetecken.  

    Jag tror att du skulle ha bättre att skriva något lite mer robust.

  7. 7

Vad tror du?

Den här sidan använder Akismet för att minska spam. Läs om hur din kommentardata behandlas.