PHP: corta o seu extracto na palabra usando strrpos

código html

Se estás a traballar con PHP e só desexas amosar un extracto do texto de orixe e cortalo en varios caracteres, o teu extracto pode parecer feo se está feito a media cadea. Tiven que escribir unha función para facelo en ASP e en ASP.NET que basicamente circulou desde o último carácter cara atrás para atopar o último espazo e cortalo alí. Unha especie de desagradable e un pouco excesivo. Podes ver isto en acción na miña casa páxina onde só fornezo os primeiros 500 caracteres.

Estaba totalmente preparado para desenvolver a mesma función con PHP hoxe pero descubrín (como de costume) que PHP tiña unha función que xa o fai, strrpos.

O código antigo levará unha subcadea ($ content) desde o primeiro carácter ata o número máximo de caracteres que desexa ($ maxchars):

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

O novo código:

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

Entón, o novo código primeiro corta o contido no límite de caracteres que buscas. Non obstante, o seguinte paso é buscar o último espazo ("") no contido. $ pos acabará sendo esa posición. Agora, simplemente asegúrome de que realmente hai un espazo no contido preguntándolle se $ pos> 0. Se non o hai, só cortará o contido na cantidade de caracteres que solicitei. Se hai espazo, cortará con graza o meu contido no espazo.

Esta é unha boa forma de usar a combinación do número máximo de caracteres e cortalo coa palabra. Espero que vos guste!

E estou seguro de que descubrirei se hai unha función ASP.NET que faga isto ... Non puiden atopala.

7 Comentarios

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

    Se $ content é inicialmente MÁIS curto que $ maxchars, o código escrito seguirá mirando de dereita a esquerda para atopar un espazo e recortará a última palabra. Pode concatenar un espazo ao final de $ content ou facer un if (strlen () ...)

  5. 5

    Isto parecía funcionar como unha función (dirixíndose ao comentario anterior):

    function showexcerpt ($ content, $ maxchars) {

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

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

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

    devolver $ contido. "...";

    Else {}

    devolver contido $;

    }

    }

  6. 6

    E se o noso personaxe final é un personaxe de puntuación como un punto final, un signo de admiración ou un interrogante? Por desgraza, este código borrará toda a palabra que precede ao carácter de puntuación.  

    Creo que sería mellor escribir algo un pouco máis robusto.

  7. 7

¿Que pensas?

Este sitio usa Akismet para reducir o spam. Aprende a procesar os teus datos de comentarios.