Foros del Web » Programando para Internet » PHP »

Cortar Url/link dentro de un string.

Estas en el tema de Cortar Url/link dentro de un string. en el foro de PHP en Foros del Web. Hay una función que creo es la misma que usa vBulletin, y lo que hace es, dentro de un texto, recortar los links para que ...
  #1 (permalink)  
Antiguo 02/05/2007, 11:58
Avatar de nicolaspar  
Fecha de Ingreso: noviembre-2004
Ubicación: Villa Ballester Bs-As|Ar
Mensajes: 2.002
Antigüedad: 19 años, 5 meses
Puntos: 34
Busqueda Cortar Url/link dentro de un string.

Hay una función que creo es la misma que usa vBulletin, y lo que hace es, dentro de un texto, recortar los links para que estos no desfacen la pagina.

Por ejemplo, estoy pegando este link que será cortado: http://www.google.com/search?sourcei...+mas+que+decor



Se que esta, la he visto, pero no la encuentro. Sí alguien la tiene a mano, o saben el nombre exacto como para buscarla en http://www.google.com/codesearch, se agradece
__________________
Mi punto de partida es Que Bueno Lo Nuevo
  #2 (permalink)  
Antiguo 02/05/2007, 16:03
 
Fecha de Ingreso: junio-2005
Mensajes: 981
Antigüedad: 18 años, 10 meses
Puntos: 2
Re: Cortar Url/link dentro de un string.

Creo que te estas refiriendo a la función wordwrap(), verdad?

Saludos.
  #3 (permalink)  
Antiguo 02/05/2007, 16:19
Avatar de andres013  
Fecha de Ingreso: febrero-2007
Ubicación: Bogotá Colombia
Mensajes: 222
Antigüedad: 17 años, 1 mes
Puntos: 2
Re: Cortar Url/link dentro de un string.

La funcion explode te permite partir una funcion por partes, depronto te sirva.
__________________
Desarrollando Web: La guía para los desarrolladores web
http://www.desarrollandoweb.com
  #4 (permalink)  
Antiguo 02/05/2007, 16:28
 
Fecha de Ingreso: abril-2006
Mensajes: 80
Antigüedad: 18 años
Puntos: 2
Re: Cortar Url/link dentro de un string.

No creo que sea la función wordwrap() al menos en este foro, porque si os fijáis lo que hace con urls de 56 caracteres o más es mostrar: los36primeroscaracteres...los14ultimos

Debe ser muy fácil crear una funcion que haga eso.
  #5 (permalink)  
Antiguo 02/05/2007, 16:36
 
Fecha de Ingreso: junio-2005
Mensajes: 981
Antigüedad: 18 años, 10 meses
Puntos: 2
Re: Cortar Url/link dentro de un string.

Tiro esto al vuelo, solo quedaría adaptarlo:
Código PHP:
$cant strlen($cadena);
if(
$cant 50)
{
     
$part1 substr($cadena0,36);
     
$part2 substr($cadena, -14);

     
$cadenafinal $part1 '...' $part2;

Saludos.
  #6 (permalink)  
Antiguo 02/05/2007, 16:43
 
Fecha de Ingreso: junio-2005
Mensajes: 981
Antigüedad: 18 años, 10 meses
Puntos: 2
Re: Cortar Url/link dentro de un string.

Y se me ocurre que con una regex podes sacar la palabra sin mucho esfuerzo de cualquier texto. La regex puede ser así:
Código:
#.*(.{50,}).*#U
No sé si anda es cuestión de probar.

Saludos.
  #7 (permalink)  
Antiguo 02/05/2007, 18:35
Avatar de el cirujano  
Fecha de Ingreso: mayo-2003
Ubicación: Frente al PC
Mensajes: 609
Antigüedad: 20 años, 11 meses
Puntos: 3
Re: Cortar Url/link dentro de un string.

encontre esto por ahi pero claro esta no es hecho por mi, pero es algo como lo que quieren buscar aca

Código PHP:
    if ($description 55 )
    {
    
$description substr($description036) . '...' substr($description, -14);
    }
    return 
"<a href=\"$sigpic_url\">$description</a>"
__________________
CSS2 + AJAX + PHP + MySQL, una mezcla sin competencia!!!!!!

Última edición por el cirujano; 02/05/2007 a las 18:43
  #8 (permalink)  
Antiguo 02/05/2007, 19:59
Avatar de nicolaspar  
Fecha de Ingreso: noviembre-2004
Ubicación: Villa Ballester Bs-As|Ar
Mensajes: 2.002
Antigüedad: 19 años, 5 meses
Puntos: 34
Re: Cortar Url/link dentro de un string.

Tomar el link y cortarlo rearmandolo es simple, aun teniendo los tags <a>, lo que no veo de como hacerlo es de sacar todo link de entre el texto para hacer esta tarea.

O sea, todo el primer post mio en este thread es un texto, éste pasa por una función, la cual toma cualquier link de entre el texto (por ejemplo que el puse de mas de 100 caracteres) y lo rearma como bien dice Asyolath (http://algo.....com).

Del vamos que es un patern preg (que no domino del todo); ya la tenía, la he usado en algún proyecto, pero no logro encontrarla, y estoy tan a full (de tiempos y de cabeza) que no me da para ponerme ahora a armarla, pensé que tal vez alguien la tenía.

Gracias de todas maneras, y si alguien la consigue o sabe que nombre tiene en el vbulletin estaría bueno saberlo ;).
__________________
Mi punto de partida es Que Bueno Lo Nuevo
  #9 (permalink)  
Antiguo 02/05/2007, 21:08
Avatar de Panino5001
Me alejo de Omelas
 
Fecha de Ingreso: mayo-2004
Ubicación: -34.637167,-58.462984
Mensajes: 5.148
Antigüedad: 19 años, 10 meses
Puntos: 834
Re: Cortar Url/link dentro de un string.

Hola, Nico, a ver si algo así te sirve:
Código PHP:
<?php
function redlink($link,$largopartes){
    
$patron='/\<a href\=(.*?)\>(.*?)\<\/a\>/i';
    
preg_match_all ($patron$link,$coincidencias);
    
$s='/\<a href\=(.*?)\>(.*?)\<\/a\>/se';
    if(
strlen($coincidencias[2][0])>($largopartes<<1))
        
$r='"<a href=$1>".substr("$2",0,"$largopartes")."...".substr("$2","-$largopartes")."</a>"';
    else
        
$r='"<a href=$1>$2</a>"';
    
$t=preg_replace ($s$r$link);
    return 
$t;
}
$l='<a href="index.php">este es un link muy pero muy largo </a>';
$l2='<a href="index.php">link</a>';
echo 
redlink($l,5);
echo 
'<br>'.redlink($l2,5);
?>

Última edición por Panino5001; 02/05/2007 a las 21:50
  #10 (permalink)  
Antiguo 02/05/2007, 21:38
Avatar de Panino5001
Me alejo de Omelas
 
Fecha de Ingreso: mayo-2004
Ubicación: -34.637167,-58.462984
Mensajes: 5.148
Antigüedad: 19 años, 10 meses
Puntos: 834
Re: Cortar Url/link dentro de un string.

Aquí un ejemplo aplicado:
Código PHP:
<?php
function get_links($string) {
    
$patron='/\<a href\=(.*?)\>(.*?)\<\/a\>/is';
    
preg_match_all ($patron$string,$coincidencias);
    return 
$coincidencias[0];
};


function 
redlink($link,$largopartes){
    
$patron='/\<a href\=(.*?)\>(.*?)\<\/a\>/i';
    
preg_match_all ($patron$link,$coincidencias);
    
$s='/\<a href\=(.*?)\>(.*?)\<\/a\>/se';
    if(
strlen($coincidencias[2][0])>($largopartes<<1))
        
$r='"<a href=$1>".substr("$2",0,"$largopartes")."...".substr("$2","-$largopartes")."</a>"';
    else
        
$r='"<a href=$1>$2</a>"';
    
$t=preg_replace ($s$r$link);
    return 
$t;
}


foreach(
get_links(file_get_contents('http://www.php-hispano.net/foros/PHP/19794'))as $v)
    echo 
'<br />'.redlink($v,5);
?>
Bueno, lo demás ya no hace falta aclararlo: teniendo todos los links reales en una matriz y en otra los reemplazos, un str_replace y listo!

Última edición por Panino5001; 02/05/2007 a las 21:51
  #11 (permalink)  
Antiguo 02/05/2007, 22:09
 
Fecha de Ingreso: junio-2005
Mensajes: 981
Antigüedad: 18 años, 10 meses
Puntos: 2
Re: Cortar Url/link dentro de un string.

Panino lo que muestras esta bien pero creo que no aplica. En un foro no escriben <a href="la pagina a referenciar">La pagina</a>, en los post simplemente indican la pagina. No sé el contexto donde quiere aplicar ésto nicolaspar pero imagino que necesita alguna regex de este tipo:
Código:
#http:\/\/(.*\.(com|net|org))#U
Con eso teóricamente serviría para sacarlas. Tengamos en cuenta que si tenes las etiquetas BBCODE (así se llamaban?) es mucho más fácil obtener la dirección (aún que ya no importa porque no se necesita acortar nada):
Código:
#\[URL="(.*)"\].*\[URL\]#U
Saludos.
  #12 (permalink)  
Antiguo 03/05/2007, 07:56
Avatar de nicolaspar  
Fecha de Ingreso: noviembre-2004
Ubicación: Villa Ballester Bs-As|Ar
Mensajes: 2.002
Antigüedad: 19 años, 5 meses
Puntos: 34
Re: Cortar Url/link dentro de un string.

Gracias por responder a todos ;)

Buscando entre viejos proyectos la encontré, pero no es lo que recordaba (por que siempre me pasa lo mismo con mis recuerdos?:P):

Código PHP:
function cutLink($link,$cuantos=15){
    if( empty( 
$link ) ) return false;
    
$str eregi_replace("<a([^>]+)>|</a>"""$link);
    if( 
strlen($str) > $cuantos ){
        
$mostrar substr$str0$cuantos 3) . '...' substr$str, - 3);
    }else{
        
$mostrar $str;
    } 
    
$href '<a href="'.$str.'">'.$mostrar.'</a>';
    return 
$href;

#Para implementarla:
echo cutLink('<a href="http://www.google.com/search?sourceid=navclient-ff&ie=UTF-8&rls=GGGL,GGGL:2006-43,GGGL:es&q=sd+asdkjahs+kdha+ksdhka+shdkjashdk+haskjdh+aksjh">http://www.google.com/search?sourceid=navclient-ff&ie=UTF-8&rls=GGGL,GGGL:2006-43,GGGL:es&q=sd+asdkjahs+kdha+ksdhka+shdkjashdk+haskjdh+aksjh</a>'); 
#O bien
echo "<hr>".cutLink('http://www.google.com/search?sourceid=navclient-ff&ie=UTF-8&rls=GGGL,GGGL:2006-43,GGGL:es&q=sd+asdkjahs+kdha+ksdhka+shdkjashdk+haskjdh+aksjh'); 
El tema es que aplica directo sobre el link (muy similar a readlink de Panino). Lo que necesitaría es una similar a get_links() (también de Panino con el muy odiado por mi preg_match_xxx que no logro dominar) pero que me mantenga también el texto, o sea, si le paso:

Código:
hola http://www.akjhas.dasa/asasa/asasasas/asas.pl
Me dé como salida:

Código:
hola <a href="http://www.akjhas.dasa/asasa/asasasas/asas.pl">http://www.akjh.../asas.pl</a>
Así que si alguien tiene unos minutos y puede retocar esa función se agradece, y si explica el como del porque mucho mejor, al menos para mi !! :)

Gracias!



Edit: La necesito para un amigo que esta haciendo una actualización sobre un sitio que ya esta hecho y que tiene sus añitos.
El mismo tiene un campo text (texto de las novedades supongo) que contiene textos con links, y al volcarlos en una columna de unos reducidos 140px (por decir) se hace teta...para que se entienda el uso que tendrá.
__________________
Mi punto de partida es Que Bueno Lo Nuevo
  #13 (permalink)  
Antiguo 03/05/2007, 09:31
Avatar de Panino5001
Me alejo de Omelas
 
Fecha de Ingreso: mayo-2004
Ubicación: -34.637167,-58.462984
Mensajes: 5.148
Antigüedad: 19 años, 10 meses
Puntos: 834
Re: Cortar Url/link dentro de un string.

Está medio enredado, pero ahora no tengo tiempo de depurarlo, fijate si así te va mejor:
Código PHP:
<?php 
function get_links($string) {
    
$patron='/\<a href\=(.*?)\>(.*?)\<\/a\>/is';
    
preg_match_all ($patron$string,$coincidencias);
    return 
$coincidencias[0];
};
function 
get_links_text($string) {
    
$patron='#[^<ref=">]http\:\/\/([^"<>]*)#is';
    
preg_match_all ($patron$string,$coincidencias);
    return 
$coincidencias[0];
    
};
function 
redlink($link,$largopartes){
    
$patron='/\<a href\=(.*?)\>(.*?)\<\/a\>/i';
    
preg_match_all ($patron$link,$coincidencias);
    
$s='/\<a href\=(.*?)\>(.*?)\<\/a\>/se';
    if(
strlen($coincidencias[2][0])>($largopartes<<1))
        
$r='"<a href=$1>".substr("$2",0,"$largopartes")."...".substr("$2","-$largopartes")."</a>"';
    else
        
$r='"<a href=$1>$2</a>"';
    
$t=preg_replace ($s$r$link);
    return 
$t;
}

function 
redlink2($link,$largopartes){
    if(
strlen($link)>($largopartes<<1))
        
$r='<a href="'.$link.'">'.substr($link,0,$largopartes).'...'.substr($link,-$largopartes).'</a>';
    else
        
$r='<a href="'.$link.'">'.$link.'</a>';
        return 
$r;
}

$cadena='hola http://www.akjhas.dasa/asasa/asasasas/asas.pl <br><a href="http://www.google.com.ar">Este es un magnífico buscador y en él hay de todo</a>';
$links=get_links($cadena);
$urls=get_links_text($cadena);
foreach(
$links as $v){
    
$replace[]=redlink($v,5);
}
foreach(
$urls as $v){
    
$replace[]=redlink2($v,5);
}
$search=array_merge($links,$urls);
echo 
str_replace($search,$replace,$cadena);
?>
  #14 (permalink)  
Antiguo 03/05/2007, 09:40
Avatar de nicolaspar  
Fecha de Ingreso: noviembre-2004
Ubicación: Villa Ballester Bs-As|Ar
Mensajes: 2.002
Antigüedad: 19 años, 5 meses
Puntos: 34
Re: Cortar Url/link dentro de un string.

Groso Panino!, ya fue pasado a quién lo usará, y para el uso que tendrá (se ejecutará una vez cada tanto; es para enviar unos newsletters por lo que comprendí) esta más que bien!.
__________________
Mi punto de partida es Que Bueno Lo Nuevo
  #15 (permalink)  
Antiguo 03/05/2007, 09:42
Avatar de Panino5001
Me alejo de Omelas
 
Fecha de Ingreso: mayo-2004
Ubicación: -34.637167,-58.462984
Mensajes: 5.148
Antigüedad: 19 años, 10 meses
Puntos: 834
Re: Cortar Url/link dentro de un string.

Buenísimo!
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 19:28.