PHP: Wytnij fragment słowa za pomocą strrpos

Kod HTML

Jeśli pracujesz z PHP i chcesz pokazać tylko fragment tekstu źródłowego i wyciąć go w kilku znakach, fragment może wyglądać brzydko, jeśli jest wykonany w połowie ciągu. Musiałem napisać funkcję, aby to zrobić w ASP i ASP.NET, która w zasadzie cyklicznie przechodziła od ostatniego znaku z powrotem, aby znaleźć ostatnią spację i wyciąć ją tam. Trochę paskudne i trochę przesadzone. Możesz to zobaczyć w akcji w moim domu strona gdzie podaję tylko pierwsze 500 znaków.

Byłem w pełni przygotowany do stworzenia tej samej funkcji w PHP dzisiaj, ale stwierdziłem (jak zwykle), że PHP ma już funkcję, która to robi, strrpos.

Stary kod zajmie podciąg ($ content) od pierwszego znaku do maksymalnej liczby żądanych znaków ($ maxchars):

$ content = substr ($ content, 0, $ maxchars); echo $ content;

Nowy kod:

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

Tak więc nowy kod najpierw odcina zawartość na poziomie, którego szukasz. Jednak następnym krokiem jest wyszukanie ostatniej spacji („”) w treści. Pozycja $ pos zakończy się tą pozycją. Teraz po prostu upewniam się, że w treści rzeczywiście jest spacja, pytając, czy $ pos> 0. Jeśli nie, po prostu odetnie zawartość po żądanej liczbie znaków. Jeśli jest jakaś przestrzeń, wdzięcznie odetnie moją zawartość w tym miejscu.

To fajny sposób na użycie kombinacji maksymalnej liczby znaków i obcięcia jej w słowie. Mam nadzieję że lubisz!

I jestem pewien, że dowiem się, czy istnieje funkcja ASP.NET, która to robi… Nie mogłem jej znaleźć.

Komentarze 7

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

    Jeśli $ content jest początkowo KRÓTKI niż $ maxchars, napisany kod nadal będzie szukał spacji od prawej do lewej i wycina ostatnie słowo. Możesz połączyć spację na końcu $ content lub wykonać if (strlen ()…)

  5. 5

    To wydawało się działać jako funkcja (odnosząc się do poprzedniego komentarza):

    function showexcerpt ($ content, $ maxchars) {

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

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

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

    zwraca $ content. "…";

    } Else {

    return $ content;

    }

    }

  6. 6

    A co, jeśli nasza ostatnia postać jest znakiem interpunkcyjnym, takim jak kropka, wykrzyknik lub znak zapytania? Niestety, ten kod usunie całe słowo poprzedzające wspomniany znak interpunkcyjny.  

    Myślę, że lepiej byłoby napisać coś bardziej solidnego.

  7. 7

Co o tym myślisz?

Ta strona używa Akismet do redukcji spamu. Dowiedz się, jak przetwarzane są dane komentarza.