Bonjour bonjour ! Et merci d'avance Smiley smile

Un peu débutant, je n'arrive pas à trouver le bon encodage pour envoyer une string comportant une page HTML entière vers le serveur (PHP 7.04) (je programme un éditeur HTML).

x-www-form-urlencoded pose un problème lorsque mon HTML comporte des  

J'ai essayé d'encoder l'envoi avec
encodeURIComponent( data )
mais empty($_POST['data']) est vraie !
J'ai essayé urldecode(), htmlspecialchars(), rawurldecode(), utf8_encode()... rien ne semble aussi bien accepté que la méthode toute simple, sans encodage.

Vous le voyez, je débute, dans ce domaine Smiley confused ... Des idées ? Smiley langue

Code AJAX utilisé :

// sauve mon montage HTML dans une string
var data = 'data=' + HTMLtext;
// Démarre la requête Ajax de sauvegarde
var xmlhttp = new XMLHttpRequest();
// prépare la forme que prendra la réponse
xmlhttp.onreadystatechange = function(){
	if (xmlhttp.readyState==4 && xmlhttp.status==200){
		alert( xmlhttp.responseText );
	}
}
// envoie le fichier vers le serveur
xmlhttp.open('POST', 'save.php', true);
// encode les datas pour le transfert en $_POST[]
data = encodeURIComponent( data );
xmlhttp.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
xmlhttp.send( data );

Modifié par Gill (07 Feb 2019 - 11:48)
Je suis totalement stupide ! Smiley fache
J'ai trouvé le bug : xmlhttp doit mettre les données dans une variable, que j'avais nommée "data" et que je récupérais avec $_POST['data'];
... mais si j'encodais l'ensemble de mon envoi, "data =" y compris, je ne pouvais forcément pas récupérer mon fichier en sortie !

Donc, la bonne solution est celle-ci
(avec le duo JS: encodeURIComponent() / PHP: urldecode() ) :
// sauve mon montage HTML dans une string
var data = HTMLtext;
// Démarre la requête Ajax de sauvegarde
var xmlhttp = new XMLHttpRequest();
// prépare la forme que prendra la réponse
xmlhttp.onreadystatechange = function(){
	if (xmlhttp.readyState==4 && xmlhttp.status==200){
		alert( xmlhttp.responseText );
	}
}
// envoie le fichier vers le serveur
xmlhttp.open('POST', 'save.php', true);
// encode les datas pour le transfert en $_POST[]
data = encodeURIComponent( data );
xmlhttp.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
xmlhttp.send( 'data=' + data );

if( ! empty($_POST['data']) ){
	$post_data = urldecode( $_POST['data'] );
}
Meilleure solution