1. tendriamos que sacarle a la cadena las etiquetas html
aca tenemos algo que puede ayudar:
[URL="http://ar2.php.net/manual/es/function.wordwrap.php"]http://ar2.php.net/manual/es/function.wordwrap.php[/URL]
Te dejo esa parte XD, lo interesante sería sacar los links y marcar en que partes estaba de modo de volver a ponerlo después de separar las silabas
2. habría que calcular a mano en la medida que definimos cuantos son los carateres que mas presisamente entran (esto habria que hacerlo a mano ya que eso va a depender del estilo del texto) ... entonces, digamos, si el div mide 200px, sabemos que entran ej. 70 caracteres por linea como máximo.
para eso tenemos la función imageftbox() y imagettfbbox() que calculan el tamaño de las palabras dependiendo del tipo de fuente.
3. habria que detectar la ultima palabra, mejor dicho el espacio mas cercano al caracter 70
tenemos algo de ayuda con eso aca:
[URL="http://foros.cristalab.com/php-como-recortar-un-texto-sin-cortar-la-ultima-palabra-t12854/"]http://foros.cristalab.com/php-como-recortar-un-texto-sin-cortar-la-ultima-palabra-t12854/[/URL]. De este modo sabemos ya cual es la ultima palabra.
para eso también usamos las funciones bbox ya mencionadas.
4. separarla en silabas (he aqui el gran kilombo)
Esto ya lo hice :)
5,6,7. ir sumando silabas hasta llegar lo mas cerca posible de 70 caracteres.
cortar la cadena por esa silaba, agregarle "-<br />"
volver a ponerle las etiquetas html
si logramos todo eso nevará XD
Bueno esta es la función que hice para separar silabas, puede que tenga errores y estoy seguro que
abimaelrc lo habría hecho mejor XD
Código PHP:
<?php
function escons($char){
$char=strtolower($char);
if($char=="a" or $char=="e" or $char=="i" or $char=="o" or $char=="u" or $char=="" or $char==" ")return false;
else return true;
}
function esvoc($char){
$char=strtolower($char);
if($char=="a" or $char=="e" or $char=="i" or $char=="o" or $char=="u")return true;
else return false;
}
function juntas($chars){
$chars=strtolower($chars);
$char1=substr($chars,0,1);
$char2=substr($chars,1,1);
if($char1=="h") return true;
if($char1=="b" or $char1=="c" or $char1=="d" or $char1=="f" or $char1=="g" or $char1=="j" or $char1=="k" or $char1=="p" or $char1=="q" or $char1=="t" or $char1=="v" or $char1=="x")
if($char2=="h" or $char2=="l" or $char2=="r" or $char2=="s" or $char2=="w" or $char2=="y" or $char2=="z")return true;
if($char1==$char2)
if($char1=="l" or $char1=="r")return true;
return false;
}
$texto="esto es un texto de prueba: Llamenme cagon pero se lo que pasa con estas funciones arranca de un bosquejo ordenado y llamativo y termina siendo un nido de if excepsiones y demas jaja yo paso ^^ suerte";
$prev="";$reprev="";
for($f=0;$f<strlen($texto);$f++){
$current=substr($texto,$f,1);
$next=substr($texto,$f+1,1);
if((esvoc($prev) and escons($current) and $next!=" " and !escons($next)) or (escons($prev) and escons($current) and!juntas($prev.$current))){
$texto=substr($texto,0,$f)."-".substr($texto,$f);
$f++;
}elseif(esvoc($reprev) and escons($prev) and escons($current)){
$texto=substr($texto,0,$f-1)."-".substr($texto,$f-1);
$f++;
}
$reprev=$prev;
$prev=$current;
}
echo $texto;
?>
no funciona con tildes y puede dar problemas si hay comas (,), puntos (.), guiones(-) y otros símbolos, así como esta devuelve:
es-to es un tex-to de prue-ba: Lla-men-me ca-gon pe-ro se lo que pa-sa con es-tas fun-cio-nes a-rran-ca de un bos-que-jo or-de-na-do y lla-ma-ti-vo y ter-mi-na sien-do un ni-do de if ex-ce-psio-nes y de-mas ja-ja yo pa-so ^-^ suer-te
lo cual me parece excelente!
(el texto elegido para la prueba fué al azar, nada personal)