integro il codice:
invia.htm
Codice PHP:
<form action="#">
<input accesskey="B" name="_nome" tabindex="10" type="text" size="40" maxlength="40" title="AccessKey B, TabIndex 10 || Inserire il nome" />
<textarea accesskey="Q" name="_testo" tabindex="15" rows="10" cols="60" title="AccessKey Q, TabIndex 15 || Inserire il testo dell'email"></textarea>
......
</form>
invia.js
Codice PHP:
for (var i=0;i<datiEmail.length;i++)
{
var dato=encodeURIComponent(datiEmail[i]);
dato+="=";
dato+=encodeURIComponent(datiEmail[i].value);
body.push(dato);
}
return body.join("&");
.....
var xmlhttp=creaOggettoXMLHttp();
xmlhttp.open("post","invia.php",true);
xmlhttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
xmlhttp.onreadystatechange=function()
{
if (xmlhttp.readyState==4)
{
if (xmlhttp.status==200)
{
alert(xmlhttp.responseText);
}
else
{
alert("Errore durante l'invio del messaggio(" + xmlhttp.statusText + ").";
}
}
};
xmlhttp.send(body);
invia.php
Codice PHP:
header("Content-Type: text/plain;");
.....
recupero i dati da $_POST[]
.....
mail("$destinatario","$oggetto","$messaggio","$headers");
......
aggiungo che ho forzato il funzionamento in questo modo:
lato client, dopo aver codificato con encodeURIComponent() i dati, tramite string.replace, ho sostituito la codifica del ritorno a capo, "%0A" con una stringa di mia invenzione "#acapo".
lato server chiaramente ho sostituito dalle variabili post la stringa "#acapo" con il ritorno a capo "\r\n". così funziona, il che conferma che è quel dannato "%0A" che crea l'errore.