PHP: Svoj výňatok odrežte pri slove pomocou strrpos

html kód

Ak pracujete s PHP a chcete zobraziť iba výňatok zo zdrojového textu a orezať ho pred niekoľkými znakmi, môže byť váš výňatok škaredý, ak je vykonaný v polovici reťazca. Musel som na to napísať funkciu v ASP a v ASP.NET, ktorá v podstate cyklovala od posledného znaku späť, aby našla posledný priestor a tam ho odrezala. Trochu škaredé a trochu prehnané. Môžete to skutočne vidieť v akcii na mojom dome strana kde uvádzam iba prvých 500 znakov.

Bol som dnes plne pripravený vyvinúť rovnakú funkciu s PHP, ale zistil som (ako obvykle), že PHP má funkciu, ktorá to už robí, strrpos.

Starý kód zaberie podreťazec ($ content) od prvého znaku po maximálny požadovaný počet znakov ($ maxchars):

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

Nový kód:

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

Nový kód teda najskôr odreže obsah na hranici požadovaného počtu znakov. Ďalším krokom je však vyhľadať poslednú medzeru („“) v obsahu. $ pos bude nakoniec tou pozíciou. Teraz sa jednoducho ubezpečím, že v obsahu je skutočne medzera, a to tak, že sa opýtam, či $ pos> 0. Ak nie, iba to odstrihne obsah na požadovaný počet znakov. Ak je v nej nejaký priestor, pôvabne to odreže môj obsah v danom priestore.

Toto je pekný spôsob použitia kombinácie maximálneho počtu znakov a prerušenia pri slove. Dúfam, že sa vám páči!

A som si istý, že zistím, či existuje funkcia ASP.NET, ktorá to robí ... Nemohol som ju nájsť.

7 Komentáre

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

    Pokiaľ je $ content spočiatku KRAJŠÍ ako $ maxchars, bude sa pri písaní kódu stále hľadať medzera sprava doľava a vystrihne sa posledné slovo. Môžete buď zreťaziť medzeru na konci obsahu $, alebo urobiť if (strlen ()…)

  5. 5

    Zdá sa, že to fungovalo ako funkcia (riešenie predchádzajúceho komentára):

    funkcia showexcerpt ($ obsah, $ maxchars) {

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

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

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

    vrátiť $ obsah. „…“;

    } Else {

    return $ content;

    }

    }

  6. 6

    Čo ak je náš konečný znak interpunkčný znak ako bodka, výkričník alebo otáznik? Tento kód bohužiaľ vymaže celé slovo pred uvedeným interpunkčným znakom.  

    Myslím, že by ste mali lepšie napísať niečo trochu robustnejšie.

  7. 7

Čo si myslíte?

Táto stránka používa Akismet na zníženie spamu. Zistite, ako sa spracúvajú údaje vašich komentárov.