
PHP: Odrežite svoj odlomak na riječ koristeći strrpos
Ako radite s PHP-om i želite prikazati samo odlomak iz izvornog teksta i odrezati ga na više znakova, vaš odlomak može izgledati ružno ako se radi u sredini niza. Morao sam napisati funkciju da to učinim u ASP-u i u ASP.NET-u koja se u osnovi okretala od zadnjeg znaka natrag da bi pronašla zadnji prostor i tamo ga odsjekla. Nekako gadno i malo pretjerano. To zapravo možete vidjeti na djelu kod moje kuće Strana gdje pružam samo prvih 500 znakova.
Bio sam potpuno spreman razviti istu funkciju s PHP-om danas, ali ustanovio sam (kao i obično) da PHP već ima funkciju koja to već radi, strrpos.
Stari će kôd uzeti podniz ($ sadržaj) od prvog znaka do maksimalnog broja znakova koji želite ($ maxchars):
$ content = substr ($ content, 0, $ maxchars); echo $ content;
Novi kod:
$ content = substr ($ content, 0, $ maxchars); $ pos = strrpos ($ sadržaj, ""); if ($ pos> 0) {$ content = substr ($ sadržaj, 0, $ pos); } echo $ content;
Dakle, novi kod prvo odreže sadržaj na ograničenju broja znakova koje tražite. Međutim, sljedeći korak je traženje posljednjeg razmaka ("") u sadržaju. $ pos će prestati biti takav položaj. Sada jednostavno osiguravam da u sadržaju zaista postoji prostor pitajući je li $ pos> 0. Ako nema, samo će odrezati sadržaj na broj znakova koje sam tražio. Ako ima prostora, graciozno će odsjeći moj sadržaj u prostoru.
Ovo je lijep način korištenja kombinacije maksimalnog broja znakova i odsijecanja pri riječi. Nadam se da volite!
I siguran sam da ću otkriti postoji li ASP.NET funkcija koja to radi ... Nisam je mogao pronaći.
Doug, u C#-u možete koristiti metodu String.LastIndexOf da uradite ono što strrpos radi u PHP-u.
Znao sam da će se to dogoditi! 🙂
Hvala, Abhijit!
Odlično! Baš ono što sam tražio. Hvala.
Ako je $content inicijalno KRAĆI od $maxchars, kod kako je napisan će i dalje izgledati zdesna nalijevo za razmak i izrezati posljednju riječ. Možete ili spojiti razmak na kraju $content, ili napraviti if (strlen()…)
Činilo se da ovo funkcionira kao funkcija (obraćajući se na prethodni komentar):
funkcija showexcerpt($content, $maxchars) {
if (strlen($content) > $maxchars) {
$content= substr($content, 0, $maxchars);
$pos = strrpos($content, " ");
if ($pos>0) {
$content = substr($content, 0, $pos);
}
vrati $content . "...";
} Else {
povratni $ sadržaj;
}
}
Šta ako je naš konačni znak znak interpunkcije kao što je tačka, uzvičnik ili upitnik? Nažalost, ovaj kod će obrisati cijelu riječ koja prethodi pomenutom znaku interpunkcije.
Mislim da bi bilo bolje da napišete nešto malo robusnije.
Tako dobra ideja!