PHP: coupez votre extrait au mot en utilisant strrpos

code html

Si vous travaillez avec PHP et que vous souhaitez afficher uniquement un extrait de votre texte source et le couper à un certain nombre de caractères, votre extrait peut sembler moche s'il est fait au milieu de la chaîne. J'ai dû écrire une fonction pour faire cela dans ASP et dans ASP.NET qui passait essentiellement du dernier caractère à revenir pour trouver le dernier espace et le couper là-bas. Un peu méchant et un peu exagéré. Vous pouvez réellement voir cela en action sur ma maison page où je ne fournis que les 500 premiers caractères.

J'étais tout à fait prêt à développer la même fonction avec PHP aujourd'hui mais j'ai trouvé (comme d'habitude) que PHP avait une fonction qui le fait déjà, strrpos.

L'ancien code prendra une sous-chaîne ($ content) du premier caractère au nombre maximum de caractères que vous voulez ($ maxchars):

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

Le nouveau code:

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

Ainsi, le nouveau code coupe d'abord le contenu à la limite de caractères que vous recherchez. Cependant, l'étape suivante consiste à rechercher le dernier espace (”“) dans le contenu. $ pos finira par être cette position. Maintenant, je m'assure simplement qu'il y a réellement un espace dans le contenu en demandant si $ pos> 0. S'il n'y en a pas, le contenu sera simplement coupé au nombre de caractères que j'ai demandé. S'il y a de l'espace, cela coupera gracieusement mon contenu dans l'espace.

C'est une belle façon d'utiliser la combinaison du nombre maximum de caractères et de le couper au mot. J'espère que vous aimez!

Et je suis sûr que je vais découvrir s'il existe une fonction ASP.NET qui fait cela ... Je n'en ai pas trouvé.

7 Commentaires

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

    Si $ content est initialement PLUS COURT que $ maxchars, le code tel qu'il est écrit cherchera toujours un espace de droite à gauche et coupera le dernier mot. Vous pouvez soit concaténer un espace à la fin de $ content, soit faire un if (strlen ()…)

  5. 5

    Cela semblait fonctionner comme une fonction (répondant au commentaire précédent):

    function showexcerpt ($ content, $ maxchars) {

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

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

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

    retourner $ content. "…";

    } Else {

    retourner $ content;

    }

    }

  6. 6

    Et si notre caractère final est un caractère de ponctuation comme un point d'exclamation ou un point d'interrogation? Malheureusement, ce code effacera tout le mot précédant ledit caractère de ponctuation.  

    Je pense que vous feriez mieux d'écrire quelque chose d'un peu plus robuste.

  7. 7

Que pensez-vous?

Ce site utilise Akismet pour réduire les spams. Découvrez comment sont traitées les données de vos commentaires..