Se stai lavorando con PHP e vuoi mostrare solo un estratto dal tuo testo sorgente e tagliarlo su un numero di caratteri, il tuo estratto può sembrare brutto se è fatto a metà stringa. Ho dovuto scrivere una funzione per farlo in ASP e in ASP.NET che fondamentalmente è andato in bicicletta dall'ultimo carattere per trovare l'ultimo spazio e tagliarlo lì. Un po 'sgradevole e un po' eccessivo. Puoi effettivamente vederlo in azione a casa mia - dove fornisco solo i primi 500 caratteri.
Ero completamente pronto a sviluppare la stessa funzione con PHP oggi, ma ho scoperto (come al solito) che PHP aveva già una funzione che lo fa, strpos.
Il vecchio codice prenderà una sottostringa ($ content) dal primo carattere al numero massimo di caratteri che desideri ($ maxchars):
$ contenuto = substr ($ contenuto, 0, $ maxchars); echo $ contenuto;
Il nuovo codice:
$ contenuto = substr ($ contenuto, 0, $ maxchars); $ pos = strrpos ($ contenuto, ""); if ($ pos> 0) {$ contenuto = substr ($ contenuto, 0, $ pos); } echo $ content;
Quindi il nuovo codice taglia prima il contenuto al limite di caratteri che stai cercando. Tuttavia, il passaggio successivo consiste nel cercare l'ultimo spazio ("") nel contenuto. $ pos finirà per essere quella posizione. Ora, mi assicuro semplicemente che ci sia effettivamente uno spazio nel contenuto chiedendo se $ pos> 0. Se non c'è, taglierà semplicemente il contenuto al numero di caratteri che ho richiesto. Se c'è dello spazio, interromperà con grazia il mio contenuto nello spazio.
Questo è un bel modo di usare la combinazione del numero massimo di caratteri e il tagliandolo alla parola. Spero ti piaccia!
E sono sicuro che scoprirò se c'è una funzione ASP.NET che fa questo ... Non sono riuscito a trovarne una.
Doug, in C# puoi usare il metodo String.LastIndexOf per fare ciò che fa strrpos in PHP.
Sapevo che sarebbe successo! 🙂
Grazie, Abhijit!
Eccellente! Proprio quello che stavo cercando. Grazie.
Se $content è inizialmente PIÙ CORTO di $maxchars, il codice come scritto apparirà ancora da destra a sinistra per uno spazio e taglierà l'ultima parola. Puoi concatenare uno spazio alla fine di $content o fare un if (strlen()…)
Questo sembrava funzionare come una funzione (indirizzando il commento precedente):
funzione showexcerpt($contenuto, $caratteri massimi) {
if (strlen($contenuto) > $maxchars) {
$contenuto= substr($contenuto, 0, $maxchars);
$pos = strrpos($contenuto, " ");
se ($pos>0) {
$contenuto = substr($contenuto, 0, $pos);
}
restituisci $contenuto . "...";
} Else {
restituire $ content;
}
}
E se il nostro carattere finale fosse un carattere di punteggiatura come un punto, un punto esclamativo o un punto interrogativo? Sfortunatamente, questo codice cancellerà l'intera parola che precede il suddetto carattere di punteggiatura.
Penso che faresti meglio a scrivere qualcosa di un po' più robusto.
Una buona idea!