11548 sujets
Salut,
Ta variable data est un morceau d'url et comme tu le sais, on ne peut pas mettre tout et n'importe quoi dans une url. Les esperluettes en particulier (les "et" commerciaux), servent à délimiter les paramètres, elles ne peuvent donc évidemment pas apparaître telles quelles à l'intérieur des paramètres mais doivent être encodées. La fonction encodeURIComponent() prend en charge l'encodage des principaux caractères "interdits", tu pourrais donc essayer :
Ta variable data est un morceau d'url et comme tu le sais, on ne peut pas mettre tout et n'importe quoi dans une url. Les esperluettes en particulier (les "et" commerciaux), servent à délimiter les paramètres, elles ne peuvent donc évidemment pas apparaître telles quelles à l'intérieur des paramètres mais doivent être encodées. La fonction encodeURIComponent() prend en charge l'encodage des principaux caractères "interdits", tu pourrais donc essayer :
'&data=' + encodeURIComponent(articleData)
'&' et ';' sont les deux séparateurs réservés pour les query strings CGI, et ils font partit des caractères réservés dans la RFC 3986.
Comme dit plus haut il faut échapper tes composants avec "encodeURIComponent" attention n'utilise pas "encode" qui est obselete ou "encodeURI" qui n'encode pas les délimiteurs (car il ne peut distinguer leurs usages légitime dans l'URI complète).
Pour que le résultat soit vraiment parfait - top niveau - conforme IETF il faudrait aussi utiliser le subdelimiter associé aux espaces :
encodeURIComponent(articleData).replace(/%20/g, '+');
PS : attention ta dernière string n'est pas fermée.
Comme dit plus haut il faut échapper tes composants avec "encodeURIComponent" attention n'utilise pas "encode" qui est obselete ou "encodeURI" qui n'encode pas les délimiteurs (car il ne peut distinguer leurs usages légitime dans l'URI complète).
Pour que le résultat soit vraiment parfait - top niveau - conforme IETF il faudrait aussi utiliser le subdelimiter associé aux espaces :
encodeURIComponent(articleData).replace(/%20/g, '+');
PS : attention ta dernière string n'est pas fermée.
J'ai résolu mon problème !
avec une solution très simple
je code mes "&" et "+" de mon texte avant d'effectuer le post avec AJAX
ensuite, lors de le reception des données, je decode :
avec une solution très simple
je code mes "&" et "+" de mon texte avant d'effectuer le post avec AJAX
// JS
articleData = articleData.replace(/&/g,'(hex26)');
articleData = articleData.replace(/+/g,'(hex2B)');
ensuite, lors de le reception des données, je decode :
//PHP
$articleData = str_replace("(hex26)", "&", $articleData) ;
$articleData = str_replace("(hex2B)", "+", $articleData) ;

C'est une très mauvaise solution tu ne prends en compte que deux caractères alors qu'il y'a une quinzaine de caractères réservés dans la RFC 3986 sans compter tout les caractères non ASCII qu'il faut recoder avec leur codepoint Unicode.
Ton programme risque de se casser au moindre caractère spécial (#, ?, =, ect).
Ton programme risque de se casser au moindre caractère spécial (#, ?, =, ect).