Comunidad de diseño web y desarrollo en internet online

Límite de carácteres en una palabra

Citar            
MensajeEscrito el 24 Sep 2007 07:21 pm
Estoy tratando de hacer un script que corte las palabras cuando alcanza un límite de caracteres (que le ponga un <br/> por ejemplo), por ejemplo 15. Que las corte asi no me deforma el diseño del sistema de comentarios. Buscando en internet conseguí esto, que es lo más parecido pero no me sirve, ya que corta el texto entero y no las palabras:

Código :

<?php

// Inicializamos las variables 
$tamano = 50; // tamaño máximo 
$contador = 0; 
$texto = 'Este es el texto que se cortará para que no ocupe más de 50 carácteres'; 

// Cortamos la cadena por los espacios 
$arrayTexto = split(' ',$texto); 
$texto = ''; 

// Reconstruimos la cadena 
while($tamano >= strlen($texto) + strlen($arrayTexto[$contador])){ 
    $texto .= ' '.$arrayTexto[$contador]; 
    $contador++; 
} 


echo $texto; 

?>


Agradecería mucho si alguno me puede indicar la solución, un saludo!

Por Barduck

13 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 24 Sep 2007 07:38 pm
Lee acerca de la función str_replace

Por Pedro

BOFH

3017 de clabLevel

3 tutoriales
6 articulos

  Bastard Operators From Hell

Honduras

firefox
Citar            
MensajeEscrito el 24 Sep 2007 07:46 pm
Pruebalo, no te garantizo que funciona pues no lo he probado. Cualquier cosa lo modificamos luego

Chaop!


Código :

<?php

// Inicializamos las variables 
$tamano = 50; // tamaño máximo 
$contador = 0; 
$texto = 'Este es el texto que se cortará para que no ocupenpo más de 50 carácteres'; 
//$texto="aa";
if(strlen($texto)>=$tamano){
$renglones=ceil(strlen($texto)/$tamano);
for($i=0;$i<$renglones;$i++){
$in=$tamano*$i;
echo substr($texto, $in,$tamano)."<br>";
}
}
else 
echo $texto; 
?>

Por luchope

38 de clabLevel



Genero:Masculino  

Bogota Colombia

firefox
Citar            
MensajeEscrito el 24 Sep 2007 09:39 pm
Esta pregunta la acabo de contestar en otro foro así que copio la respuesta que puse allí...

Mi solución es usar expresiones regulares. La expresión que tengo en mente es esta:

Código :

\b\w{15,} 


Dice: encontrar palabras que tengan al menos 15 caracteres. No importa si la palabra tiene caracteres repetidos porque el objetivo es que una palabra muy larga no "rompa" el límite de espacio en la página ¿cierto?, entonces cualquier palabra larga podría arruinar el formato (si es que entendí bien el problema, claro).

Implementación:

Código :

<?php 
$patron = "/\b\w{15,}/"; 
$hits = Array(); 
$c = preg_match_all($patron, $cadena, $hits); 
var_dump($hits); 
?> 


En $c tienes la cantidad de palabras que cumplen la condición y en el array $hits tienes las palabras que cumplen la expresión regular, las que luego puedes reemplazar para acortarlas así:

Código :

if ($c > 0) { 
for ($i=0;$i<$c; $i++) { 
$h = $hits[0][$i]; 
$p1 = substr($h,0,14); 
$p2 = substr($h,15,strlen($h)); 
$salida = $p1."<br>".$p2; 
echo $salida; // 1 
} 
} 


Notar que el código anterior solo corta las palabras en la posición 15, si la palabra es más larga que 30, habrá que repetir el proceso (esto se puede hacer recursivamente pero no lo haré aquí). Notar también que lo que hago es inserar un tag br en la posición 15 de la palabra pero puede ser reemplazado por un espacio y luego confiar en la función wordwrap() para que formatee mejor el texto. Esto es a gusto del consumidor ;).

Finalmente hay que reemplazar los resultados en el texto original. En el código anterior, reemplazar la línea marcada con // 1 por:

Código :

$cadena = str_replace($h,$salida,$cadena); 


Listo ;).

Por DriverOp

Claber

2510 de clabLevel



 

opera
Citar            
MensajeEscrito el 25 Sep 2007 12:10 pm

Código :

<?php

$text ="Y la palabra no deben pasar de quince letras, no recuerdo ninguna palabra tan larga. Asi que simplemente probemos AEIOU-BCDFGHIJKLMNPQRSTVWYZ porque sino la cadena debe ser cortada
";
echo preg_replace("/([^\s]{15}?)/","\\1<br />", $text);

?>


El 15 es el limite de caracteres por palabra, muevele si quieres y debe funcionar. Saludos

Por Maikel

BOFH

5575 de clabLevel

22 tutoriales
5 articulos

Genero:Masculino   Team Cristalab

Claber de baja indefinida

firefox
Citar            
MensajeEscrito el 25 Sep 2007 06:21 pm
Muchas gracias por responder!
Maikel el código que pusiste funcionó prefecto, aparte es muy simple y efectivo, te lo agradesco, lo único que cambié fue en vez de un <br/> puse un espacio, queda mejor para los comentarios.
Un saludo!

Por Barduck

13 de clabLevel



Genero:Masculino  

firefox

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.