hola a todos, les escribo a ver si alguno de ustedes conoce de alguna función o si han desarrollado alguna función que me permita trocear una cadena en longitudes de tamaño xx, sin correr el riesgo de que quede una palabra cortada.
Lo que pretendo hacer es un reporte, pero necesito controlar la cántidad de caracteres que se mostrarán por línea.
Ejemplo :
Si tengo la cadena: prueba de longitud del campo xxx
y quisiera que esa cadena la fraccionara para mostrar en cada linea 10 caracteres, tendría que hacer algo como:
prueba de
longitud del
campo ...
Gracias de verdad en lo que me puedan ayudar.
He tratado de desarrollar un código para está función, pero no he logrado que trabaje del todo bien. Aquí la coloco para ver que es lo que falla.
<?
function Ajusta_Texto($cadena,$longitud){
//1º Paso: conocer lo saltos de línea que posee el texto, con el fin de crear un explode a partir de dichos saltos
$cadena = nl2br($cadena);
$arreglo = explode("<br />",$cadena);
//2º Paso se recorre el vector obtenido y en cada posición del vector se comienza a insertar los saltos de linea coorespondiente,
// para que cumpla con la longitud especificada
$cadena_a_retornar="";
for($indice=0;$indice<= count($arreglo)-1;$indice++){
/* for($aux=$longitud+1;$aux >=0; $aux--){
echo "Posicion Nº" . $aux . " = " . substr($cadena,$aux,1) . "<br>";
if(substr($cadena,$aux-1,1) == " ")
break;
}//cierre del for
echo "sale aux en: " , $aux;*/
if($indice>0)
$cadena= substr($arreglo[$indice],2,strlen($arreglo[$indice]));
else
$cadena = $arreglo[$indice];
$fin_de_cadena = false; //booleano para indicar si ya se ha recorrido en sutotalidad la subcadena contenida en la posición del vector
while($fin_de_cadena == false){
if(strlen($cadena)<= $longitud){
$cadena_a_retornar.= substr($cadena,0);
$fin_de_cadena = true;
}
else{
if(substr($cadena,$longitud,1) != " "){ //no se puede fraccionar la subcadena de forma directa, de modo que se busca la palabre anterior
//1º Caso: Si el punto limite coincide con el fin de la palabra o del texto ---> se puede fraccionar sin problema
if(substr($cadena,$longitud + 1, 1) == " "){
$cadena_a_retornar.= substr($cadena,0,$longitud); //. "<br>";
$cadena = substr($cadena,$longitud); //elimina de la cadena la subcadena procesada
}
else{ //el punto limite no coincide con el fin de la palabra ---> se busca la palabra anterior a ella para fraccionar
for($ddd=$longitud+1;$ddd >=0; $ddd--){
if(substr($cadena,$ddd-1,1) == " ")
break;
}//cierre del for
$cadena_a_retornar.= substr($cadena,0,$longitud-$ddd+2) . "<br>";
$cadena = substr($cadena,$longitud-$ddd-2); //elimina de la cadena la subcadena procesada
}
//2º Caso: Sea un palabra ---> Se buscar la palabra inmediata a ella para poder fragmentar la cadena
}//cierre del if
else{
$cadena_a_retornar.= substr($cadena,0,$longitud). "<br>"; //toma la subcadena procesada
$cadena = substr($cadena,$longitud); //elimina de la cadena la subcadena procesada
}//cierre del else
}
}//cierre del while
$cadena_a_retornar.= "<br>"; //se agrega el salto de línea que tenía originalmente
}//cierre del for
return($cadena_a_retornar);
}//cierre de la función
El problema que estoy obteniendo con mi función es cuando hay una palabra que va a quedar cortada con la fragmentación ... y se me está presentando con el for que hago para buscar la palabra que está inmediatamente anterior a ella ... el for debería salirse cuando encuentre en espacio en blanco ... pero por alguna razón ejecuta el ciclo varias veces.