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 originalfunction enviarDatos(){
//donde se mostrará lo resultados
divResultado = document.getElementById('resultado');
divFormulario = document.getElementById('formulario');
divResultado.innerHTML= '<img src="anim.gif">';
//valores de los cajas de texto del formulario
nom=document.frmempleado.nombre.value;
usunick=document.frmempleado.usuario.value;
come=document.frmempleado.comentario.value;
hor=document.frmempleado.hora.value;
fech=document.frmempleado.fecha.value;
tipo=document.frmempleado.tipo.value;
enlace=document.frmempleado.enlace.value;
horsec=document.frmempleado.horasec.value;
//cambio de & a 1234567890AAABBBCCC
var expr1 = /[&]/gi;
var anchr1 = '1234567890AAABBBCCC';
come2=come.replace(expr1,anchr1);
//ahora el cambio de url a enlaces
var expr = /(https?:\/\/[^\s]+)[^<]/gi;
var anchr= '<a href="$1" target="_blank">$1</a>';
come3=come2.replace(expr,anchr);
ajax=objetoAjax();
ajax.open("POST", "actualizacion.php",true);
ajax.onreadystatechange=function() {
if (ajax.readyState==4) {
divResultado.innerHTML = ajax.responseText
divFormulario.style.display="none";
}
}
ajax.setRequestHeader("content-type","application/x-www-form-urlencoded");
ajax.send("&nombre="+nom+"&usunick="+usunick+"&comentario="+come3+"&hora="+hor+"&fecha="+fech+"&tipo="+tipo+"&enlace="+enlace+"&horasec="+horsec)
}
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> ', 'á', 'é', 'í', 'ó', 'ú', 'Á', 'É', 'Í', 'Ó', 'Ú', 'ñ', 'Ñ');
$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!!