Buenos días.
Tengo un problema y llevo 2 horas mirando por todas partes.
El escenario del crimen es un formulario donde se introducen unos datos y se envían, previa validación, mediante post de manera asíncrona de esta manera:
Código PHP:
var frm = document.forms.miFormulario;
var qString = "a=1";
for (i=0; i<frm.elements.length; i++)
{
qString += "&"+ frm.elements[i].name + "=" + frm.elements[i].value;
}
var xo = xmlobj();
xo.open('POST', 'xml_recibe.asp?d1=' + d1 + '&d2=' + d2 + '&d3=' + d3);
xo.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
xo.onreadystatechange = function()
{
if (xo.readyState == 4)
{
alert(xo.responseText);
if (xo.responseText.substring(0, 5) != 'Error') frm.reset();
cargaAluP(ex, af, gr);
}
}
xo.send(qString);
La funcion xmlobj() está más que probada y lo único que hace es crear el objeto ajax.
Estos datos se reciben en el citado archivo, se procesan y se insertan en una BD MSSQL.
La solución empezó por comenzar el archivo con:
Código PHP:
<%@ Language=VBScript Codepage=65001 %>
También he probado, con peores resultados, una función similar a
utf8_decode de PHP que
me he encontrado.
Después de solucionar las tildes, ñ y resto de caracteres aún me queda que se pierden los espacios en la conversión

Es decir, si envío la cadena "PEPE GONZALEZ", en la BD acaba guardado "PEPEGONZALEZ"
También he probado cambiar la codificación de los archivos implicados de ANSI a UTF8, sin ningún cambio ni a mejor ni a peor.
De momento estoy pensando aplicar un parche, sustituyendo " " por los caracteres ";:" y restaurando luego en destino, pero me gustaría saber si alguien tiene una solución más... bonita.