Je code une chaîne qui sera transmise dans une URL (via GET). Mais si j'utilise escape
, encodeURI
ou encodeURIComponent
, &
sera remplacé par %26amp%3B
, mais je veux qu'il soit remplacé par %26
. Qu'est-ce que je fais mal?
Sans voir votre code, il est difficile de répondre à autre chose qu'un coup de poignard dans le noir. Je suppose que la chaîne à laquelle vous passez encodeURIComponent (), qui est la méthode correcte à utiliser, provient du résultat de l'accès à la propriété innerHTML. La solution consiste à obtenir la valeur de la propriété innerText/textContent:
var str,
el = document.getElementById("myUrl");
if ("textContent" in el)
str = encodeURIComponent(el.textContent);
else
str = encodeURIComponent(el.innerText);
Si ce n'est pas le cas, vous pouvez utiliser la méthode replace () pour remplacer l'entité HTML:
encodeURIComponent(str.replace(/&/g, "&"));
Si vous avez littéralement ceci:
encodeURIComponent('&')
Alors le résultat est %26
, vous pouvez le tester ici . Assurez-vous que la chaîne que vous encodez est juste &
et non &
pour commencer ... sinon, l'encodage est correct , ce qui est probablement le cas. Si vous avez besoin d'un résultat différent pour une raison quelconque, vous pouvez effectuer un .replace(/&/g,'&')
avant l'encodage.
Il existe des codages HTML et URI. &
est &
codé en HTML tandis que %26
est &
dans codage URI .
Donc, avant de coder votre chaîne, vous voudrez peut-être décoder en HTML, puis la coder en URI :)
var div = document.createElement('div');
div.innerHTML = '&AndOtherHTMLEncodedStuff';
var htmlDecoded = div.firstChild.nodeValue;
var urlEncoded = encodeURIComponent(htmlDecoded);
résultat %26AndOtherHTMLEncodedStuff
J'espère que cela vous fait gagner du temps