Foros del Web » Programando para Internet » PHP »

Convertir url de cadena en enlace.

Estas en el tema de Convertir url de cadena en enlace. en el foro de PHP en Foros del Web. Hola, ya sé que este tema está bastante hablado y he ido probando varios ejemplos que he ido encontrando para conseguir convertir las url de ...
  #1 (permalink)  
Antiguo 05/02/2011, 15:17
Avatar de Joystickoso  
Fecha de Ingreso: enero-2009
Mensajes: 127
Antigüedad: 15 años, 3 meses
Puntos: 3
Pregunta Convertir url de cadena en enlace.

Hola, ya sé que este tema está bastante hablado y he ido probando varios ejemplos que he ido encontrando para conseguir convertir las url de una cadena de texto en enlaces. También he leído el aporte sobre Expresiones PCRE pero la verdad es que no lo pillo ni por asomo.

De todos los códigos que he probado el que mejor me funciona (que no bien) es este:
Código PHP:
$patron='/(http:\/\/[^\s]+)/';
$resultado=preg_replace($patron,'<a href="\\0" target="_blank">\\0</a>',$cadena); 
Y digo que no me funciona del todo bien porque al probar con diferentes url's me he encontrado con algo que no pilla esto '&'.
Por ejemplo, la dirección:
http://www.forosdelweb.com/f18/aport...s-pcre-646110/ la pilla perfectamente pero si la dirección es cómo esta:
http://www.youtube.com/?gl=ES&hl=es el resultado es:
http://www.youtube.com/?gl=ES
No consigo que lea la '&' en las url. Alguien me puede echar un cable o darme una pista de por donde van los tiros?
Gracias de antemano y Salud'Os!!
  #2 (permalink)  
Antiguo 06/02/2011, 17:56
Avatar de Joystickoso  
Fecha de Ingreso: enero-2009
Mensajes: 127
Antigüedad: 15 años, 3 meses
Puntos: 3
De acuerdo Respuesta: Convertir url de cadena en enlace.

Hola, ya lo he solucionado, no de forma normal, creo pero ya me funciona.
El caso es que estoy usando ajax+php usando clases+mysql, cosa que no puse antes. Y según he estado leyendo, que ha sido bastante, el problema es que el formulario activa una funcion ajax para mandar los datos a un archivo php que después actualiza en la capa que necesite. Y haciendo esto hay un problema en la codificación de la página (utf-8,iso) ya que ajax trabaja siempre con lo mismo y no es compatible con la codificación que usa el archivo php.
He estado haciendo pruebas cambiando la codificacion en tablas,formulario,la página, el script de ajax y no he conseguido nada.
Al final lo he conseguido cambiando en el script de ajax el símbolo '&' que es el que me daba guerra por una cadena tipo '1234567890AAABBBCCC' .
Una vez hecho esto el script cambia las url por enlaces y manda los datos al php donde lo que hago es volver a cambiar '1234567890AAABBBCCC' por el símbolo '&' y lo inserto en la base de datos. Es un poco lio y seguramente el método más tonto que existe pero funciona.
Código Javascript:
Ver original
  1. function enviarDatos(){
  2.     //donde se mostrará lo resultados
  3.     divResultado = document.getElementById('resultado');
  4.     divFormulario = document.getElementById('formulario');
  5.     divResultado.innerHTML= '<img src="anim.gif">';
  6.    
  7.     //valores de los cajas de texto del formulario
  8.     nom=document.frmempleado.nombre.value;
  9.     usunick=document.frmempleado.usuario.value;
  10.     come=document.frmempleado.comentario.value;
  11.     hor=document.frmempleado.hora.value;
  12.     fech=document.frmempleado.fecha.value;
  13.     tipo=document.frmempleado.tipo.value;
  14.     enlace=document.frmempleado.enlace.value;
  15.     horsec=document.frmempleado.horasec.value;
  16.    
  17.     //cambio de & a 1234567890AAABBBCCC
  18.        var expr1 = /[&]/gi;
  19.     var anchr1 = '1234567890AAABBBCCC';
  20.     come2=come.replace(expr1,anchr1);
  21.         //ahora el cambio de url a enlaces
  22.     var expr = /(https?:\/\/[^\s]+)[^<]/gi;
  23.         var anchr= '<a href="$1" target="_blank">$1</a>';  
  24.     come3=come2.replace(expr,anchr);
  25.    
  26.  
  27.     ajax=objetoAjax();
  28.     ajax.open("POST", "actualizacion.php",true);
  29.     ajax.onreadystatechange=function() {
  30.         if (ajax.readyState==4) {
  31.             divResultado.innerHTML = ajax.responseText
  32.             divFormulario.style.display="none";
  33.  
  34.         }
  35.     }
  36.     ajax.setRequestHeader("content-type","application/x-www-form-urlencoded");
  37.     ajax.send("&nombre="+nom+"&usunick="+usunick+"&comentario="+come3+"&hora="+hor+"&fecha="+fech+"&tipo="+tipo+"&enlace="+enlace+"&horasec="+horsec)
  38. }
Y el archivo PHP actualizacion.php:
Código PHP:
<?php
include_once("claseusu.php");
$nom=$_POST['nombre'];
$come2=$_POST['comentario'];
$hor=$_POST['hora'];
$fech=$_POST['fecha'];
$tipo=$_POST['tipo'];
$enlace=$_POST['enlace'];
$horasec=$_POST['horasec'];
$usunick=$_POST['usunick'];

//vuelvo a cambiar el '1234567890AAABBBCCC' por el símbolo '&'
$buscar1='1234567890AAABBBCCC';
$cambiar1='&';
$come3=str_replace($buscar1,$cambiar1,$come2);

//ahora lo paso a html y así no da guerra por siacaso
$inicom="<p>";
$come4=nl2br($come3);
$buscar=array('\r\n''<br /><br />''á''é''í''ó''ú''Á''É''Í''Ó''Ú''ñ''Ñ');
$cambiar=array('<br />''</p><p> ''&aacute;''&eacute;''&iacute;''&oacute;''&uacute;''&Aacute;''&Eacute;''&Iacute;''&Oacute;''&Uacute;''&ntilde;''&Ntilde;');
$final="</p>";
$com2=$inicom.$come4.$final;
$comhtml2=str_replace($buscar$cambiar$com2);


sleep(2);
//inserta el registro
$objempleado = new cEmpleado;
if (
$objempleado->crear($nom,$comhtml2,$hor,$fech,$tipo,$enlace,$horasec,$usunick)==true){
    echo 
"A gusto!";
}
else{
    echo 
"No se pudo insertar.";
}
//Y hago la consulta de nuevo
include('consulta.php');
?>
Como veis es un poco lio y al final el cambio de url a enlaces lo he hecho por ajax que es donde me daba el problema.
Gracias de todas formas y Salud'Os!!
  #3 (permalink)  
Antiguo 06/02/2011, 21:41
Avatar de ARICARRARO  
Fecha de Ingreso: diciembre-2010
Ubicación: México
Mensajes: 227
Antigüedad: 13 años, 4 meses
Puntos: 10
Respuesta: Convertir url de cadena en enlace.

Buena solución.

Etiquetas: enlace, url, cadenas
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 00:01.