Ver Mensaje Individual
  #8 (permalink)  
Antiguo 28/09/2006, 15:06
jatubio
 
Fecha de Ingreso: abril-2004
Mensajes: 19
Antigüedad: 20 años, 1 mes
Puntos: 0
Finalmente con ayuda de vuestras propuestas he conseguido tomar el rumbo adecuado y aquí está la función resultado de mis devaneos:

<?php
print(urlWrap( "xxxx://xxx.wellnessbooks.com/cgi-bin/search.pl?Operation=ItemSearch&Keywords=psicogeria tria&SearchIndex =Books&templates=search",47));

function urlWrap($fullUrl,$lineMaxSize)
{
$chars="&?/";
$newLine="<BR>";
$newUrl="";
$lineSize=0;
$pos=0;
$maxPos=strlen($fullUrl);

while($pos < $maxPos)
{
$iChar=0;
$maxChar=strlen($chars);
$trozo="";

// Cojo un trozo del tamaño máximo de línea
$trozotmp=substr($fullUrl,$pos,$lineMaxSize);
// Doy prioridad a los caracteres según aparecen
while($iChar < $maxChar)
{
$char=substr($chars,$iChar,1);
$trozo="";

$posChar=strrpos($trozotmp,$char);
// Si lo encuentro
if(!$posChar===False)
{
$posChar+=1;
// Si la posición no excede del máximo de línea, se lo pegamos a la línea actual
if($lineSize + $posChar <= $lineMaxSize)
{
$trozo=substr($fullUrl,$pos,$posChar);
$newUrl.=$trozo;
$lineSize+=strlen($trozo);
$pos+=$posChar;
$newUrl.=$newLine;
$lineSize=0;
break;
}
}

// Sino, probamos con el siguiente caracter separador
$iChar++;
}

// Si no se encontró ninguno de los caracteres en los límites definidos, 'cortamos por lo sano'
if($trozo =="" && $pos < $maxPos)
{
$newUrl.=substr($fullUrl,$pos,$lineMaxSize-$lineSize);
$newUrl.=$newLine;
$pos+=$lineMaxSize-$lineSize;
$lineSize=0;
}

// Por último si el trozo que queda es menor que el máximo de línea, lo añadimos directamente
if($maxPos-$pos <= $lineMaxSize)
{
$newUrl.=substr($fullUrl,$pos);
$newUrl.=$newLine;
break;
}

}

return $newUrl;
}


Probablemente se pueda optimizar (y de hecho os animo a ello si os apetece) pero al menos me da el resultado esperado:

xxxx://xxx.wellnessbooks.com/cgi-bin/search.pl?
Operation=ItemSearch&Keywords=psicogeriatria&
SearchIndex =Books&templates=search


Es decir, las líneas tienen un tamaño máximo de 47 o en su defecto, han sido cortadas en la máxima longitud posible o bien por un carácter '&', un carácter '?' o un carácter '/' respetando además esa prioridad.