(слишком долго для комментариев ...)
Я наткнулся на эту тему, пытаясь реализовать кодировку RFC 3986 . Если вы используете более новую функцию encodeForURL (вместо urlEncodedFormat ), она немного приблизит вас, но все же потребует несколько настроек.
Согласно RFC 3986:
- Незарезервированные символы, которые не должны быть экранированы:
ALPHA / DIGIT / "-" / "." / "_" / "~" /
- Пробелы должны быть закодированы как
%20
вместо +
- Зарезервированные символы, которые следует экранировать, включают:
: / ? ## [ ] @ ! $ & ' ( ) * + , ; =
Чтобы результаты EncodeForURL были совместимы:
- Принудительное кодирование звездочки "*" (зарезервированный символ)
- Обратное кодирование тильды "~" (должно кодироваться , а не ).
- Изменить кодировку пробела с "+" на "% 20":
Код:
encodedText = encodeForURL("space period.asterisk*");
encodedText = replaceList( encodedText , "%7E,+,*", "~,%20,%2A");