Ver Mensaje Individual
  #2 (permalink)  
Antiguo 06/02/2011, 17:56
Avatar de Joystickoso
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!!