Ответ 1
Я вижу, что вы ответили на свой вопрос re: UNSAFE
. Что касается этого вопроса:
Кроме того, этот код имеет методы escape/unescape, помеченные как "устаревшие" с 2009 года. Почему они устарели?
В этом выпуске в декабре 2010 года есть некоторый фон: https://bugs.ruby-lang.org/issues/4167 В этой теме Yui Naruse пишет:
URI lib говорит, что он ссылается на RFC2396, поэтому текущее поведение верное в его спецификации.
Да, я знаю, что текущее поведение - это не то, что вы ожидаете. Поэтому мы планируем измените lib на ссылку RFC3986.
Кроме того, текущий URI.encode является простым gsub. Но я думаю, что это должно разделяйте URI на компоненты, затем выходите из каждого компонента и, наконец, присоединяйтесь к ним.
Таким образом, текущий URI.encode считается вредным и устаревшим. Это будет удалять или изменять поведение резко.
Что такое замена в это время?
Как я уже говорил, текущий URI.encode ошибочен на уровне спецификации. Итак, мы не будет обеспечивать точную замену. Замена будет отличаться использование случай.
Мы думали, что наиболее предпочтительным случаем является создание экранированного URI из объединенного URI componets. Для этого людям следует использовать URI.join или URI.encode_www_form; вам следует избегать каждого компонента перед присоединением их.