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 entre cordas. 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;

Polo tanto, 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 atopar unha.

7 Comentarios

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

    Se $content é inicialmente MENOR que $maxchars, o código tal e como está escrito aínda terá un espazo de dereita a esquerda e cortará a última palabra. Podes concatenar un espazo ao final de $content ou facer un if (strlen()…)

  5. 5

    Isto parecía funcionar como unha función (abordando o comentario anterior):

    función showexcerpt($content, $maxchars) {

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

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

    se ($pos>0) {
    $contido = substr($contido, 0, $pos);
    }

    devolver $content . "…";

    Else {}

    devolver contido $;

    }

    }

  6. 6

    E se o noso carácter final é un signo de puntuación como un punto, un signo de admiración ou un signo de interrogación? Desafortunadamente, este código borrará toda a palabra que precede o devandito carácter de puntuación.  

    Creo que será mellor que escribas 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.