par Martin JS 17-Février-2023

Bonjour, j'ai un bug avec un formulaire HTML dont je récupère la valeur d'un champ texte, et que je passe à un script PHP avec AJAX jQuery. Lorsque des caractères spéciaux comme le ? ou le # sont présents dans la valeur de l'input cela bug.

Voilà le code HTML :

<input type="text" name="info" value="exemple avec un ? ou et #" id="info">

Et mon code AJAX :

<script>
function action(info){
$.ajax({
url : 'action.php',
type : 'GET', 
data : 'info=' + info, 
dataType : 'html',
success : function(reponse){
// ...
});
}
$('#action').click( function(){
var info= document.getElementById("info").value;
action(info);
});
</script>

1 Réponse

par Antoine 17-Février-2023

Les caractères spéciaux comme le # ou le ?, lorsqu'ils sont passés dans l'URL, sans être préalablement encodés, vont être interprétés par votre navigateur.

Le # sera interprété comme une ancre HTML, et le ?, ou bien même le &, comme un paramètre GET de l'URL.

Vous devez donc encoder la valeur de votre input en une séquence d'échappement UTF-8 ; et pour cela il existe la fonction JavaScript encodeURIComponent().

Pour reprendre votre exemple, il suffit d'encoder la variable info :

var info = encodeURIComponent(document.getElementById("info").value);

De cette manière tous les caractères spéciaux , / ? : @ & = + $ # seront encodés dans l'URL et ne seront plus interprétés.

Vous trouverez d'avantage d'information sur la fonction encodeURIComponent() via cette page du site de Mozilla.

par Martin JS 17-Février-2023

Merci beaucoup ça fonctionne.

Questions liées

Bienvenue sur 1FORMATIK, où vous pouvez poser des questions en lien avec l'informatique et internet, et recevoir des réponses d'Antoine et d'autres internautes.

2.6k questions

3k réponses

...