PHP: Tranĉu vian ekstrakton ĉe la vorto per strrpos

html-kodo

Se vi laboras kun PHP kaj vi volas montri nur eltiraĵon de via fontteksto kaj fortranĉi ĝin per kelkaj signoj, via eltiraĵo povas aspekti malbela se ĝi estas farita meze. Mi devis skribi funkcion por fari tion en ASP kaj en ASP.NET, kiu esence biciklis de la lasta signo reen por trovi la lastan spacon kaj fortranĉi ĝin tie. Iom aĉa kaj iomete troigita. Vi efektive povas vidi ĉi tion en mia hejmo paĝo kie mi nur provizas la unuajn 500 signojn.

Mi estis tute preta disvolvi la saman funkcion kun PHP hodiaŭ sed trovis (kiel kutime), ke PHP havas funkcion, kiu faras ĝin jam, strrpos.

La malnova kodo prenos subĉenon ($ enhavo) de la unua signo ĝis la maksimuma nombro de signoj, kiujn vi volas ($ maxchars):

$ enhavo = substr ($ enhavo, 0, $ makskaroj); eoi $ enhavon;

La nova kodo:

$ enhavo = substr ($ enhavo, 0, $ makskaroj); $ pos = strrpos ($ enhavo, ""); if ($ pos> 0) {$ content = substr ($ content, 0, $ pos); } eoi $ enhavon;

Do la nova kodo unue fortranĉas la enhavon ĉe la serĉata limo de signoj. Tamen la sekva paŝo estas serĉi la lastan spacon ("") en la enhavo. $ pos finos esti tiu pozicio. Nun mi simple certigas, ke efektive estas spaco en la enhavo, demandante, ĉu $ pos> 0. Se ne, ĝi simple fortranĉos la enhavon laŭ la nombro de signoj, kiujn mi petis. Se estas spaco, ĝi gracie fortranĉos mian enhavon ĉe la spaco.

Ĉi tio estas bela maniero uzi la kombinaĵon de la maksimuma nombro de signoj kaj fortranĉi ĝin laŭ la vorto. Mi esperas, ke vi ŝatos!

Kaj mi certas, ke mi ekscios, ĉu ekzistas ASP.NET-funkcio, kiu faras ĉi tion ... Mi ne povis trovi unu.

7 Komentoj

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

    Se $enhavo estas komence PLI MALlonga ol $maxchars, la kodo kiel skribita ankoraŭ aspektos dekstren al maldekstre por spaco kaj eltranĉos la lastan vorton. Vi povas aŭ kunligi spacon ĉe la fino de $content, aŭ fari se (strlen()...)

  5. 5

    Ĉi tio ŝajnis funkcii kiel funkcio (traktante la antaŭan komenton):

    funkcio showexcerpt($enhavo, $maxchars) {

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

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

    se ($pos>0) {
    $enhavo = substr($enhavo, 0, $pos);
    }

    redonu $enhavon . "…";

    } Alie {

    redoni $ enhavon;

    }

    }

  6. 6

    Kio se nia fina signo estas interpunkcia signo kiel punkto, ekkrio aŭ demandosigno? Bedaŭrinde, ĉi tiu kodo forviŝos la tutan vorton antaŭ la koncerna interpunkcia signo.  

    Mi pensas, ke vi pli bone skribus ion iom pli fortikan.

  7. 7

Kion vi pensas?

Ĉi tiu retejo uzas Akismeton por redukti spamon. Lernu, kiel via komento datiĝas.