Foros del Web » Programando para Internet » PHP »

Acortar direcciones

Estas en el tema de Acortar direcciones en el foro de PHP en Foros del Web. Buenas, Tengo la siguiente función que dado un texto convierte las direcciones que en él haya en enlaces: Función: freetexthost.com/cxf0irqi4a (la función es filtrada por ...
  #1 (permalink)  
Antiguo 29/06/2009, 11:00
 
Fecha de Ingreso: noviembre-2007
Mensajes: 19
Antigüedad: 16 años, 5 meses
Puntos: 0
Acortar direcciones

Buenas,

Tengo la siguiente función que dado un texto convierte las direcciones que en él haya en enlaces:

Función: freetexthost.com/cxf0irqi4a (la función es filtrada por el sistema antispam así que tuve que ponerla ahí).

La función formatea este texto:

[ Este es un texto donde hay una dirección, esta dirección: unadireccion.com/blablabla/masdireccion/index.htm , y ahora seguimos con el texto ]

De esta forma:

[ Este es un texto donde hay una dirección, esta dirección: <a target="_blank" href="unadireccion.com/blablabla/masdireccion/index.htm">unadireccion.com/blablabla/masdireccion/index.htm</a> ]

Lo que quisiera es acortar la dirección para que se muestre lo siguiente:

[ Este es un texto donde hay una dirección, esta dirección: <a target="_blank" href="unadireccion.com/blablabla/masdireccion/index.htm">unadireccion.com/blabla...</a> ]

La función no es mía, la encontré en Internet por eso aunque sí sé como acortar un texto, p ej. con substr(), lo que no sé es cómo implementarlo en la función.

Gracias.
  #2 (permalink)  
Antiguo 29/06/2009, 12:36
Avatar de emiliodeg  
Fecha de Ingreso: septiembre-2005
Ubicación: Córdoba
Mensajes: 1.830
Antigüedad: 18 años, 7 meses
Puntos: 55
Respuesta: Acortar direcciones

bueno pero para cortar el anchor text con un simple substr(); basta y sobra

podrias hacer algo asi

Código PHP:
$direccion='unadireccion.com/blablabla/masdireccion/index.htm';
echo 
'<a target="_blank" href="'.$direccion.'">'.substr($direccion,0,20).'</a>';//imprime los primeros 20 caracteres de $direccion 
__________________
Degiovanni Emilio
developtus.com
  #3 (permalink)  
Antiguo 29/06/2009, 13:58
 
Fecha de Ingreso: noviembre-2007
Mensajes: 19
Antigüedad: 16 años, 5 meses
Puntos: 0
Respuesta: Acortar direcciones

Lo que pasa es que no puedo definir la dirección en una variable "$direccion" porque esta se encuentra en medio de un texto, un comentario que escribe alguien.

La función es capaz de encontrar cualquier dirección en cualquier texto y convertirla a enlace, lo que falta es que la acorte también. Por ello pensaba en integrar substr(); en la función tal que así:

Código PHP:
"stripslashes((strlen('\\2')>0?'\\1<a href=\"hxp://\\2\" rel=\"notfollow\">substr(\\2)</a>\\3':'\\0'))"
Pero obviamente está mal porque no funciona.

Por cierto, esta es la función pero debéis de cambiar el "hxp" y "wxw" por su forma correcta:


Código PHP:
function make_links_blank($comentario)
{
return 
preg_replace(
array(
'/(?(?=<a[^>]*>.+<\/a>)
(?:<a[^>]*>.+<\/a>)
|
([^="\']?)((?:hxps?|ftp|bf2|):\/\/[^<> \n\r]+)
)/iex'
,
'/<a([^>]*)target="?[^"\']+"?/i',
'/<a([^>]+)>/i',
'/(^|\s)(wxw.[^<> \n\r]+)/iex',
'/(([_A-Za-z0-9-]+)(\\.[_A-Za-z0-9-]+)*@([A-Za-z0-9-]+)
(\\.[A-Za-z0-9-]+)*)/iex'
),
array(
"stripslashes((strlen('\\2')>0?'\\1<a href=\"\\2\" rel=\"notfollow\">\\2</a>\\3':'\\0'))",
'<a\\1',
'<a\\1 target="_blank">',
"stripslashes((strlen('\\2')>0?'\\1<a href=\"htp://\\2\" rel=\"notfollow\">\\2</a>\\3':'\\0'))",
"stripslashes((strlen('\\2')>0?'<a href=\"mailto:\\0\">\\0</a>':'\\0'))"
),
$comentario
);
}
$comentariomake_links_blank($comentario); 
Gracias por la respuesta
  #4 (permalink)  
Antiguo 29/06/2009, 14:14
Avatar de acoevil  
Fecha de Ingreso: julio-2008
Ubicación: localhost/colombia/sevillaValle.php
Mensajes: 1.123
Antigüedad: 15 años, 9 meses
Puntos: 32
Respuesta: Acortar direcciones

Ok, ya resolviste el problema de encontrar la direccion en el texto entonces porque no lo haces a esa funcion que retorne un array de enlaces y despues lo recorres con un while o for y vas recortando cada enlace.
  #5 (permalink)  
Antiguo 29/06/2009, 14:22
Avatar de Ronruby  
Fecha de Ingreso: julio-2008
Ubicación: 18°30'N, 69°59'W
Mensajes: 4.879
Antigüedad: 15 años, 9 meses
Puntos: 416
Respuesta: Acortar direcciones

Es que no puedes reemplazar por "una función". Tienes que usar preg_replace_callback()

http://www.php.net/manual/en/functio...e-callback.php
  #6 (permalink)  
Antiguo 30/06/2009, 08:28
 
Fecha de Ingreso: noviembre-2007
Mensajes: 19
Antigüedad: 16 años, 5 meses
Puntos: 0
Respuesta: Acortar direcciones

Pues ¡Lo conseguí!.

Este es el código, recordad cambiar "hxp" y "wxw" por su forma correcta

Código PHP:
function make_links_blank($noticia)
{
return 
preg_replace(
array(
'/(?(?=<a[^>]*>.+<\/a>)
(?:<a[^>]*>.+<\/a>)
|
([^="\']?)((?:hxps?|ftp|bf2|):\/\/[^<> \n\r]+)
)/iex'
,
'/<a([^>]*)target="?[^"\']+"?/i',
'/<a([^>]+)>/i',
'/(^|\s)(wxw.[^<> \n\r]+)/iex',
'/(([_A-Za-z0-9-]+)(\\.[_A-Za-z0-9-]+)*@([A-Za-z0-9-]+)
(\\.[A-Za-z0-9-]+)*)/iex'
),
array(
"stripslashes((strlen('\\2')>0?'\\1<a href=\"\\2\" rel=\"notfollow\">'.substr(\"\\2\",0,35).'</a>\\3':'\\0'))",
'<a\\1',
'<a\\1 target="_blank">',
"stripslashes((strlen('\\2')>0?'\\1<a href=\"hxp://\\2\" rel=\"notfollow\">'.substr(\"\\2\",0,35).'</a>\\3':'\\0'))",
"stripslashes((strlen('\\2')>0?'<a href=\"mailto:\\0\">\\0</a>':'\\0'))"
),
$noticia
);
}
echo 
nl2br (make_links_blank($noticia)); 
Un saludo

Edit: la solución estaba en añadir '.substr(\"\\2\",0,35).' (primera y cuarta línea del segundo array)

Última edición por Kadmon; 30/06/2009 a las 11:55
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 18:04.