Foros del Web » Programando para Internet » PHP »

Cortar un texto por palabras

Estas en el tema de Cortar un texto por palabras en el foro de PHP en Foros del Web. Buenas noches a tod@s. Voy a haceros una de esas preguntas tan raras que suelo soltar por los canales que más uso en el foro ...
  #1 (permalink)  
Antiguo 22/08/2006, 16:50
Avatar de el_javi  
Fecha de Ingreso: marzo-2005
Ubicación: MAdrid
Mensajes: 844
Antigüedad: 19 años
Puntos: 10
Cortar un texto por palabras

Buenas noches a tod@s.

Voy a haceros una de esas preguntas tan raras que suelo soltar por los canales que más uso en el foro

Mi pregunta es la siguente:

¿Alguien tiene una función la cual te corte un texto largo, por palabras (para respetar la presencia del texto), en función de una dimensión de caja donde mostrarlo?

Me he preparado unas pequeñas líneas de código, las cuales me cortan el texto y demás, pero dependiendo de la cantidad de palabras anchas, espacios y demás, me queda muy desigual según veo más textos cortados, y a mi cliente eso no le es de su agrado.

Espero haberme explicado bien, y que alguien pueda ayudarme.

Muchas gracias de antemano por leerme y atenderme.

Saludos a tod@s

  #2 (permalink)  
Antiguo 23/08/2006, 00:25
Avatar de el_javi  
Fecha de Ingreso: marzo-2005
Ubicación: MAdrid
Mensajes: 844
Antigüedad: 19 años
Puntos: 10
Porfavor... necesito ayuda en lo referido al post que puse ayer.

Si alguien puede ayudarme, le estaría muy agradecido.

Espero que esté bien explicado. De no ser asi, díganmelo, y lo aclaro.

Gracias a to@s.

  #3 (permalink)  
Antiguo 23/08/2006, 01:25
Avatar de Barinas  
Fecha de Ingreso: agosto-2004
Ubicación: Caracas, Venezuela
Mensajes: 14
Antigüedad: 19 años, 7 meses
Puntos: 0
No entiendo muy bien.. te refieres a que si por ejemplo tienes un texto de 500 palabras pero en tu caja solo caben 50, que solo se muestren las 50, y que se muestren lo justificado posible?

si es asi y la caja no se autodimensiona sino que tiene un tamaño fijo puedes:

Calcular la cantidad de caracteres que caben en tu caja.. llenanos con letras para ver cuanto le cabe en base al tamaño de la letra, tu sabras. Esa cantidad la guardas en una variable.

Haz un explode a la cadena que quieres mostrar para tener las palabras separadas en un array ej. $palabras[];

inicializas unas variables para controlar un bucle
Código PHP:
$i 0;
$cabe "si"
$acu 0
usa un bucle
Código PHP:
while ($palabras[$i] && $cabe == "si"
donde vas acumulando en un contador el numero de caracteres de la palabra que vas a imprimir
Código PHP:
$acu $acu + (strlen($palabras[$i]) + 1); 
el 1 es el espacio entre palabras que eliminaste con explode

incrementas
Código PHP:
$i++;. 
luego haces un if y preguntas si lo acumulado hasta ahora es menor que los caracteres que caben? si es asi imprimes la palabra, sino cambias la condicion del while.

Código PHP:
if ($acu $total )
  echo 
$palabra[$i];
else
 
$cabe "no"
para que se salga del bucle, pues llegaste al punto donde no caben mas en la caja que tienes.

No estoy seguro de que sea lo que quieres o funcione como quieres, o si ya has intentado asi.

Saludos
  #4 (permalink)  
Antiguo 23/08/2006, 01:31
Avatar de el_javi  
Fecha de Ingreso: marzo-2005
Ubicación: MAdrid
Mensajes: 844
Antigüedad: 19 años
Puntos: 10
Buenos días Barinas

Ante todo, Gracias por contestar.

Ya sabía yo que no me había explicado muy bien...

Lo que me comentas, ya lo había probado, y es útil, siempre y cuando tu cliente quiera que el texto se corte a mitar de una palabra... Pero el cliente me pide que el texto, quede cortado, por PALABRAS ENTERAS (especificaciones de cliente, ya sabes... :).

El concepto, es mas o menos lo que has planteado, que si tengo un texto de 1000 letras, que quepa en un espacio de 120px x 50px (ancho x alto)

Entonces, querría saber si de alguna manera se puede hacer una función que APROXIMADAMENTE (porque logicamente esto es muy variante), aproximadamente, se recorte el texto así.

Muchisimas gracias por contestarme, y por el tiempo dedicado.

Un saludo

  #5 (permalink)  
Antiguo 23/08/2006, 02:38
Avatar de Barinas  
Fecha de Ingreso: agosto-2004
Ubicación: Caracas, Venezuela
Mensajes: 14
Antigüedad: 19 años, 7 meses
Puntos: 0
Fijate que probe el codigo que te puse y las palabras no se cortan, para eso el explode, voy contando si no cabe una palabra mas, en vez de cortarla no la imprimo y ya..

Esta vez me puse a verlo en codigo a ver que tal salia supongo que lo que quieres es algo asi, copialo y pruebalo a ver..

Código PHP:
<?php

$texto 
"Epsum factorial non deposit quid pro quo hic escorol. 
Olypian quarrels et gorilla congolium sic ad nauseum. 
Souvlaki ignitus carborundum e pluribus unum."


$palabras explode(" ",$texto);
$i 0;
$cabe "si";
$acu 0;
$total 38
//38 caracteres caben si se usa la letra por defecto del navegador 
//en un marco de 120x50,

?>
<div style="border: 1px solid #000000; width:120px; height:50px;">
<?
while ($palabras[$i] && $cabe == "si"){
    
$acu $acu + (strlen($palabras[$i]) + 1);
    if (
$acu <= $total )
          echo 
$palabras[$i]." ";
    else
         
$cabe "no";  
    
$i++;
}

?>
</div>

<? ?>
Si no es asi, realmente no entiendo :P

Saludos
  #6 (permalink)  
Antiguo 23/08/2006, 03:11
 
Fecha de Ingreso: mayo-2004
Ubicación: Barcelona
Mensajes: 200
Antigüedad: 19 años, 10 meses
Puntos: 0
Se puede simplificar de esta forma,

Código PHP:
$texto "Epsum factorial non deposit quid pro quo hic escorol. 
Olypian quarrels et gorilla congolium sic ad nauseum. 
Souvlaki ignitus carborundum e pluribus unum."
;

$palabras explode(" ",$texto);
$total 10

for(
$i 0$i <= $total$i++)
{
    echo 
$palabras[$i]." ";
    
    if(
$i == $total)
    {
        echo 
"...";
    }

, he posteado sin fijarme bien en lo que escribio Barinas,
lo que he puesto te imprime tantas palabras como le indiques pero no
comprueba si en realidad caben en el marco,
losiento,

Salud2

Última edición por fido85; 23/08/2006 a las 03:24 Razón: No tengo razon
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 11:13.