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ť.
Doug, v C # môžeš použiť metódu String.LastIndexOf na to, čo strrpos v PHP.
Vedel som, že sa to stane! 🙂
Vďaka, Abhijit!
Vynikajúci! Presne to, čo som hľadal. Vďaka.
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 ()…)
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;
}
}
Č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.
Taký dobrý nápad!