1
votes

When I use escape/encodeURI/encodeURIComponent to encode URI,
it's encoding special characters (like "? [ ] &" ), and all non-ASCII characters.

I prefer the link to look like:

http:/site.com/?tm=ДОБРОЕ**%20**УТРО  

instead:

http:/site.com/?tm=%u0414%u041E%u0411%u0420%u041E%u0415**%20**%u0423%u0422%u0420%u041E  

My questions:

  1. Is there any need to encode non-ASCII ?
  2. Is there any function that encode only special characters ? (without non-ASCII)
1
Don't use escape to encode to percent encoding. Prefer encodeURIComponent. This way your URI will be http://example.com/?tm=%D0%94%D0%9E%D0%91%D0%A0%D0%9E%D0%95**%20**%D0%A3%D0%A2%D0%A0%D0%9E and most browsers will display correctly the unicode characters in the address bar and href tooltips. (SO might encode itself some chars.. jsfiddle.net/bro8Lhza)Kaiido

1 Answers

1
votes
  1. Yes.
  2. No.

In http://www.w3.org/Addressing/URL/5_BNF.html one can read:

The "national" and "punctuation" characters do not appear in any productions and therefore may not appear in URLs.