
28/09/2006, 15:06
|
| | Fecha de Ingreso: abril-2004
Mensajes: 19
Antigüedad: 20 años, 11 meses 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. |