Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Cortar frase y signos de puntuacion

Estas en el tema de Cortar frase y signos de puntuacion en el foro de PHP en Foros del Web. hola bueanas. Tengo la siguiente funcion para coertar textos y añadir los puntos suspensivos. Código PHP: function  cortar_frase ( $frase_entrada , $cortar ){     $frase_corta ...
  #1 (permalink)  
Antiguo 14/02/2013, 14:42
 
Fecha de Ingreso: octubre-2010
Ubicación: España
Mensajes: 1.007
Antigüedad: 14 años, 1 mes
Puntos: 123
Pregunta Cortar frase y signos de puntuacion

hola bueanas.

Tengo la siguiente funcion para coertar textos y añadir los puntos suspensivos.

Código PHP:
function cortar_frase($frase_entrada,$cortar){

   
$frase_corta=substr($frase_entrada,0,$cortar); // obtener la frase cortada.
   
$palabras=str_word_count($frase_corta,1); // obtener array con las palabras.
   
$total_palabras=count($palabras)-1// contar total array elementos y restar 1 elementos
   
if($total_palabras>8){
   
$palabras=array_splice($palabras,0,$total_palabras); // le quitamos la ultima palabra.
   
$frase_salida=implode(' ',$palabras); //  y concatenamos con el espacio hacia una cadena.
   
$frase_salida .= "..."// se añaden los puntos suspensivos a la cadena obtenida..
   
}else{
   
$frase_salida =$frase_entrada;
   }

  return 
$frase_salida;

Hasta aqui todo bien.
El problema de me da cuando le paso una cadena de texto con signos de puntuacion, tildes y demas.

Si paso la cadena tal cual los caractares con tildes los sustiyulle por un espacio en blanco.

Si paso la cadena con
Código PHP:
htmlentities($cadena); 
me escribe la entidad pero sin el & u el ; , ejemplo: Ó lo escribe como Oacute . por lo que al salir a pantalla no lo reconoce como entidad.

Alguien me puede orientar por que me sucede esto.

Gracias de antemano.
  #2 (permalink)  
Antiguo 14/02/2013, 16:17
 
Fecha de Ingreso: mayo-2006
Ubicación: Bogotá
Mensajes: 2.061
Antigüedad: 18 años, 6 meses
Puntos: 50
Respuesta: Cortar frase y signos de puntuacion

Pruebe asi haber si le funciona... o sino le tocaría reemplazar las vocales con tilde por vocal sin tilde... pero obviamente al final perdería la ortografía.

Código PHP:
htmlentities(utf8_decode($variable)); 
  #3 (permalink)  
Antiguo 15/02/2013, 09:52
 
Fecha de Ingreso: octubre-2010
Ubicación: España
Mensajes: 1.007
Antigüedad: 14 años, 1 mes
Puntos: 123
Respuesta: Cortar frase y signos de puntuacion

Gracias por el aporte pero no me a servido.

El
Código PHP:
utf8_decode($variable
no a variado en nada.

Decir que la cadena la extraigo de una base de datos con cotejamiento utf8, por si vale de algo.

Alguna otra idea?

O alguna otra funcion para cortar los textos?

Gracias.
  #4 (permalink)  
Antiguo 15/02/2013, 12:47
 
Fecha de Ingreso: octubre-2010
Ubicación: España
Mensajes: 1.007
Antigüedad: 14 años, 1 mes
Puntos: 123
Respuesta: Cortar frase y signos de puntuacion

Problema resuelto.

He encontrado la solucion aquí

El error estaba en la funcion str_word_count(), que si no se define un charlist con todos los caracteres especiales elimina los caracteres especiales al no tomarlos como palabras o entidades. la solucion es sustituir str_word_count() por un explode() que corte la cadena por los espacios.

Os dejo la funcion lista, por si a alguien le sucede lo mismo.

Código PHP:
function cortar_frase($frase_entrada,$cortar){

   
$frase_corta=substr($frase_entrada,0,$cortar); // obtener la frase cortada.
   
$palabras=explode(' ',$frase_corta); // obtener array con las palabras. 
   
$total_palabras=count($palabras)-1// contar total array elementos y restar 1 elementos
   
if($total_palabras>8){
   
$palabras=array_splice($palabras,0,$total_palabras); // le quitamos la ultima palabra.
   
$frase_salida=implode(' ',$palabras); //  y concatenamos con el espacio hacia una cadena.
   
$frase_salida .= "..."// se añaden los puntos suspensivos a la cadena obtenida..
   
}else{
   
$frase_salida =$frase_entrada;
   }

  return 
$frase_salida;


Etiquetas: cortar, frase, html, puntuacion, signos
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 20:08.