PHP: Uřízněte výňatek u slova pomocí strrpos

html kód

Pokud pracujete s PHP a chcete zobrazit pouze výňatek ze zdrojového textu a oříznout jej na několik znaků, může váš výňatek vypadat ošklivě, pokud je proveden uprostřed řetězce. Musel jsem napsat funkci, jak to udělat v ASP a v ASP.NET, která v podstatě cyklovala od posledního znaku zpět, aby našla poslední mezeru a tam ji odřízla. Nějaké ošklivé a trochu přehnané. Ve skutečnosti to můžete vidět v akci na mém domě strana kde poskytuji pouze prvních 500 znaků.

Byl jsem dnes plně připraven vyvinout stejnou funkci s PHP, ale zjistil jsem (jako obvykle), že PHP má funkci, která to již dělá, strrpos.

Starý kód bude mít podřetězec ($ obsah) od prvního znaku po maximální počet znaků, které chcete ($ maxchars):

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

Nový kód:

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

Nový kód tedy nejprve odřízne obsah na limitu znaků, který hledáte. Dalším krokem je však hledání posledního místa („“) v obsahu. $ pos se nakonec stane touto pozicí. Jednoduše se ujistím, že ve skutečnosti je v obsahu mezera, když se zeptám, zda $ pos> 0. Pokud tomu tak není, pouze ořízne obsah na požadovaný počet znaků. Pokud tam je nějaký prostor, půvabně to odřízne můj obsah v prostoru.

To je pěkný způsob, jak využít kombinaci maximálního počtu znaků a odříznutí od slova. Doufám, že se ti líbí!

A jsem si jistý, že zjistím, jestli existuje funkce ASP.NET, která to dělá ... Nemohl jsem ji najít.

7 Komentáře

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

    Je-li $ content zpočátku KRAJŠÍ než $ maxchars, bude kód tak, jak byl napsán, stále hledat zprava doleva mezeru a vyříznout poslední slovo. Můžete buď zřetězit mezeru na konci obsahu $, nebo udělat if (strlen ()…)

  5. 5

    Zdálo se, že to funguje jako funkce (řešení předchozího komentáře):

    funkce showexcerpt ($ obsah, $ maxchars) {

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

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

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

    vrátit $ obsah. „…“;

    } Else {

    vrátit obsah $;

    }

    }

  6. 6

    Co když je náš konečný znak interpunkční znak jako tečka, vykřičník nebo otazník? Tento kód bohužel vymaže celé slovo před uvedeným interpunkčním znakem.  

    Myslím, že by bylo lepší napsat něco trochu robustnějšího.

  7. 7

Co si myslíte?

Tyto stránky používají Akismet k omezení spamu. Zjistěte, jak jsou vaše údaje komentářů zpracovávány.