Мне интересно, почему использование url.PathEscape
не позволяет избежать символа «@».
package main
import (
"fmt"
"net/url"
)
func main() {
path := url.PathEscape("[email protected]")
fmt.Println(path) //[email protected]
}
Я понимаю, что символ @ зарезервирован для компонента пути URI, почему он не экранирует его?
Что интересно, url.PathUnescape выполняет unescape %40, который представляет кодировку для @
Это ничего не значит, url.PathUnescape
убирает все %-коды. Например, он преобразует %41
в «A», хотя очевидно, что A не имеет особого значения.
Здесь:
https://datatracker.ietf.org/doc/html/rfc3986#section-3.3
«@» явно указан как один из допустимых компонентов сегмента пути, поэтому нет необходимости экранировать его.
Нафаик. Насколько мне известно, знак
@
зарезервирован в компоненте полномочий в качестве разделителя между подкомпонентом информации о пользователе и подкомпонентом хоста. Был один сервер приложений или CMS, который активно использовал знаки @ в компоненте пути и запросах... Не могу вспомнить, какой именно.