Home » Как закодировать строку URL в Ruby

Как закодировать строку URL в Ruby

Короткий ответ: кодирование строки Ruby

Издание 2024 года:

1
URI::Parser.new.escape(my_url_string)

Там уже полный вопрос о переполнении стека по этому поводу, но похоже, что из Ruby 3 единственная рабочая версия (без тяжелых твиков) – та, что описана выше.

Полный пример:

1
2
3
4
5
6
7
8
require 'uri'

my_string = "hello world"
my_url_string = "https://somedomain.com?word=#{my_string}"
URI::Parser.new.escape(my_url_string)

# => "https://somedomain.com?word=hello%20world"

Угловой регистр: неэкранированные символы

Однако когда вы пытаетесь передать кавычку, это не работает:

1
2
3
4
5
6
7
require 'uri'

my_string = "hello?world"
my_url_string = "https://somedomain.com?word=#{my_string}"
URI::Parser.new.escape(my_url_string)

# => "https://somedomain.com?word=hello?world"

Это требует небольшого взлома .gsub('?', '%3F')

1
2
3
4
5
6
7
require 'uri'

my_string = "hello?world"
my_url_string = "https://somedomain.com?word=#{my_string.gsub('?', '%3F')}"
URI::Parser.new.escape(my_url_string)

# => "https://somedomain.com?word=hello%253Fworld"

Почему маленький хак? Ну, у меня не было времени, чтобы глубоко погрузиться в escape Однако я предполагаю, что, учитывая тот факт, что кавычка уже является частью обычного URL (это разделитель строки запроса), этот символ не кодируется.

Итак, давайте подтолкнем это предположение, попытавшись закодировать :// (Я оставил эту часть в качестве упражнения 🙂

Хорошо, они не закодированы. Это подводит меня к последнему абзацу.

Надежность кодирования URL-строки в Ruby

Я пробовал и другие методы, но этот определенно работает сейчас. Я намеренно упомянул год в названии темы, потому что не совсем уверен, что этот ответ будет действителен, скажем, через 2 или 3 года, но на данный момент это определенно самый надежный способ, который я нашел (так что далеко).

Помимо персонажей, которые на самом деле принадлежат обычному URL-адресу, других сложных вещей я не нашел.

В зависимости от варианта использования экранирование этих символов может быть хорошей или плохой идеей.

Заключение

В этом выводе нет ничего особенного, я только надеюсь, что вы выиграли сегодня 5 минут благодаря этой статье 🙂

Лучший,

Дэйвид.

2024-01-25 11:59:49


1706491321
#Как #закодировать #строку #URL #Ruby

Read more:  Специалисты по предотвращению передозировок спасают жизни на Рождество

Leave a Comment

This site uses Akismet to reduce spam. Learn how your comment data is processed.