[Один из источников информации](https://support.exactonline.com/community/s/knowledge-base#All-All-DNO-Content-urlcharacters)
В URL (Uniform Resource Locator) используется определённый набор символов, которые считаются "безопасными" (safe characters). Эти символы могут быть использованы в URL без кодирования. Важно понимать это, особенно при разработке веб-приложений или при работе с запросами к API.
Почему некоторые символы считаются "безопасными"? Это связано с тем, что они не имеют специального значения в контексте URL и не влияют на его интерпретацию. Такие символы могут быть переданы в интернет без изменений.
Все остальные символы, которые не входят в список безопасных, должны быть закодированы с использованием процентного кодирования (percent-encoding), чтобы избежать путаницы или неправильной интерпретации URL. Например, пробелы обычно кодируются как `%20`, а символы кириллицы кодируются в соответствии с их числовыми значениями в таблице символов.
Это особенно важно при передаче данных через URL, например, в запросах GET в веб-формах или при формировании запросов к API, так как некорректно закодированные URL могут привести к ошибкам или непредсказуемому поведению приложения.
<br>
| Категория | Символы | Требуется кодировка |
|----------------------|---------------------------------------------------------------------|---------------------|
| Безопасные символы | Буквенно-цифровые [0-9a-zA-Z], специальные символы `$-_.+!*'(),` | Нет |
| Зарезервированные | `; / ? : @ = &` | Да |
| Небезопасные символы | Включает пустое пространство и символы <br>``" < > # % { } \| \ ^ ~ [ ] \` `` | Да |
<br>
\* Основываясь на спецификации, "зарезервированные" символы также нужно кодировать, если они не используются по зарезервированному назначению. Например, вопросительный знак зарезервирован для обозначения строки запроса.
### Примеры
Это пример URL, содержащего небезопасные символы, которые не кодируются должным образом:
```
https://foo.com/projects?$filter=id eq guid'{DA172A8F-1F5C-4CED-85F1-C844BEAD66E1}'
```
Тот же URL, теперь он правильно закодирован:
```
https://foo.com/projects?$filter=id%20eq%20guid%27%7BDA172A8F-1F5C-4CED-85F1-C844BEAD66E1%7D)'
```