web-dev-qa-db-fra.com

Javascript decodeURI (Component) exception uri mal formée

J'ai entré ce qui suit dans la console de Chrome:

decodeURIComponent('a%AFc');

Au lieu de résulter en a0xAFc, Il a provoqué une exception URIError (uri malformé).

J'ai entendu plusieurs excuses pour expliquer pourquoi cela est possible, mais ce que je ne comprends pas, c'est pourquoi ?

La fonction decodeURIComponent() en particulier est censée décoder les données, pas vérifier l'URI.

35
Christian

%AF N'est pas un personnage à part entière mais fait partie de la séquence Unicode ( MACRON - %C2%AF ).

%AF N'a pas été produit par encodeURIComponent mais quelque chose comme escape, il peut donc être décodé par unescape.

Ce dont vous avez probablement besoin est decodeURIComponent('%C2%AF')

41
Juicy Scripter

Cela peut ou non s'appliquer à la situation de quelqu'un d'autre, mais c'est ce qui m'a fait, alors j'ai pensé que je partagerais. Je télécharge et télécharge de nombreux fichiers texte sur un CMS personnalisé.
le signe '%' dans le code source faisait des ravages pour moi.

// send to server
content = content.toString().replace(/%/g,'~~pct~~')       // ~~pct~~ <-made up replacement
content = encodeURI(content)

// get back from server / database
content = decodeURI(content)
content = content.toString().replace(/~~pct~~/g,'%')       // globally restore '%'
1
MD Nelles