Tag: cortar - Webeame Snippets


Añadir snippet

Tag: cortar



Cortar un texto en la longitud deseada

Corta un texto por el limite seleccionado y devuelve el resultado. Esta función es útil para crear el texto de entradillas ya que no incluye las etiquetas HTML como enlaces, strong y demás y para sistemas que usen entidades HTML para los acentos, comprueba que no corte ninguna de estas entidades.
  1. /**
  2. * function corta_texto (string $txt, integer $limite = 150, string $fin = '...', string $encontrar = ' ')
  3. *
  4. * Corta un texto por el limite seleccionado y devuelve el resultado.
  5. *
  6. * @$txt: Texto a cortar
  7. * @$limite: Límite máximo de caractere que se permiten al texto
  8. * @$fin: Cadena para finalizar el texto cortado
  9. * @$encontrar: Busca la última posición de esta cadena en dentro del límite de texto y lo corta en esa posición. Por defecto un espacio.
  10. *
  11. * return string
  12. */
  13. function corta_texto ($txt, $limite = 150, $fin = '...', $encontrar = ' ') {
  14. // Primero elimino todas las etiquetas de HTML
  15. $txt = preg_replace('/<[^>]+>/', '', $txt);
  16.  
  17. // Si la cadena es más corta que el límite
  18. if (strlen($txt) <= $limite) {
  19. // Quito los saltos de linea y los paso a HTML
  20. return preg_replace("/\n/s",'<br />', preg_replace("/(\r\n|\r)/s","\n", $txt));
  21. }
  22.  
  23. // Si no encuentra ninguna entidad HTML corta el texto y devuelve el resultado
  24. if (strstr($txt, '&') === false) {
  25. return substr($txt, 0, $limite).$fin;
  26. }
  27.  
  28. $caracteres = preg_split('/(&[^;\s]+;)|/', $txt, -1, PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_OFFSET_CAPTURE);
  29. $longitud = count($caracteres);
  30.  
  31. if ($longitud === 0) {
  32. return '';
  33. }
  34.  
  35. $inicio = max(0, -$longitud);
  36. $inicio_real = $caracteres[$longitud + $inicio][1];
  37.  
  38. if (($inicio + $limite) >= $longitud) {
  39. $txt = substr($txt, $inicio_real).$fin;
  40. } else {
  41. $remate = $caracteres[max($inicio, 0) + $limite][1] - $inicio_real;
  42.  
  43. while (($remate >= 0) && (!preg_match('/[ ,\.\;]/', $txt[$remate]))) {
  44. $remate--;
  45. }
  46.  
  47. $txt = substr($txt, $inicio_real, $remate).$fin;
  48. }
  49.  
  50. // Si no se define una cadena de texto a encontrar.
  51. if (empty($encontrar)) {
  52. return preg_replace("/\n/s",'<br />', preg_replace("/(\r\n|\r)/s","\n", $txt)).$fin;
  53. }
  54.  
  55. $pos = strrpos($txt, $encontrar);
  56.  
  57. if ($pos === false) {
  58. return preg_replace("/\n/s",'<br />', preg_replace("/(\r\n|\r)/s","\n", $txt)).$fin;
  59. } else {
  60. return preg_replace("/\n/s",'<br />', preg_replace("/(\r\n|\r)/s","\n", substr($txt, 0, $pos))).$fin;
  61. }
  62. }

En PHP cortar texto por Lito hace on 4/2/08 | Comentarios