PHP: corte su extracto en la palabra usando strrpos

código HTML

Si está trabajando con PHP y solo desea mostrar un extracto de su texto fuente y cortarlo en una cantidad de caracteres, su extracto puede verse feo si se hace a mitad de cadena. Tuve que escribir una función para hacer esto en ASP y en ASP.NET que básicamente hizo un ciclo desde el último carácter hacia atrás para encontrar el último espacio y cortarlo allí. Un poco desagradable y un poco exagerado. De hecho, puedes ver esto en acción en mi casa. página donde solo proporciono los primeros 500 caracteres.

Estaba completamente preparado para desarrollar la misma función con PHP hoy, pero descubrí (como de costumbre) que PHP tenía una función que ya lo hace, strrpos.

El código anterior tomará una subcadena ($ content) desde el primer carácter hasta el número máximo de caracteres que desee ($ maxchars):

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

El nuevo código:

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

Entonces, el nuevo código primero corta el contenido en el límite de caracteres que está buscando. Sin embargo, el siguiente paso es buscar el último espacio (”“) en el contenido. $ pos terminará siendo esa posición. Ahora, simplemente me aseguro de que realmente haya un espacio en el contenido preguntando si $ pos> 0. Si no lo hay, simplemente cortará el contenido en la cantidad de caracteres que solicité. Si hay algún espacio, cortará elegantemente mi contenido en el espacio.

Esta es una buena forma de usar la combinación del número máximo de caracteres y cortarlo en la palabra. ¡Espero que te guste!

Y estoy seguro de que averiguaré si hay una función ASP.NET que hace esto ... No pude encontrar una.

7 Comentarios

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

    Si $ content es inicialmente MÁS CORTO que $ maxchars, el código tal como está escrito aún buscará un espacio de derecha a izquierda y cortará la última palabra. Puede concatenar un espacio al final de $ content, o hacer un if (strlen ()…)

  5. 5

    Esto pareció funcionar como una función (abordando el comentario anterior):

    function showexcerpt ($ contenido, $ maxchars) {

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

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

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

    devolver $ contenido. "...";

    } Else {

    devolver $ contenido;

    }

    }

  6. 6

    ¿Qué pasa si nuestro carácter final es un carácter de puntuación como un punto, un signo de exclamación o un signo de interrogación? Desafortunadamente, este código borrará toda la palabra que precede a dicho carácter de puntuación.  

    Creo que sería mejor que escribiera algo un poco más sólido.

  7. 7

¿Qué piensas?

Este sitio usa Akismet para reducir el correo no deseado. Descubra cómo se procesan los datos de sus comentarios.