2011-02-01 1 views
0

У меня есть URL-адрес и спасся его с помощью:Когда мне следует избегать URL-адресов?

url = "http://ec4.images-xxx.com/images/I/41-%2B6wMiewL._SL135_.jpg" 
url = URI.escape(url) 
puts url => "http://ec4.images-xxx.com/images/I/41-%252B6wMiewL._SL135_.jpg" 

Из результата я могу видеть, что URI бежал ранее бежал %2B снова, который стал %252B, что не является правильным.

Я хочу знать, как убедиться, что один URL-адрес должен быть экранирован. Или, есть ли умный метод, который знает, когда убежать и когда не убежать?

ответ

1

Ваша первая строка уже правильно закодирована в URI, поэтому при попытке ее повторного кодирования метод URI.escape кодирует «%» с «% 25» (кодировка URI для «+»).

Если вы действительно не уверены, была ли ваша строка кодирована URI или нет, вы можете попробовать ее сначала декодировать и сравнить ее с оригиналом. Если они одинаковые, то они не были закодированы.

+0

Благодарю вас за ваше решение о том, как проверить одну строку, экранируется или нет. Однако, если я проверил, что одна строка не экранирована, поэтому я буду использовать URI.escape для ее обработки, но я обнаружил, что URI.escape («+») не влияет на escape для «+» на «% 2B», , Зачем? – ywenbo

+0

прочитал еще одно сообщение и узнал, что + является частью символа пути, и хотя побег не может сделать «+» в «% 2B», он работает хорошо. Спасибо. – ywenbo

+0

Вы правы, но когда вы выдаете URI.decode ('% 2B'), вы получаете «+». Но, как вы сказали, генеральный директор звучит. – sflinter

 Смежные вопросы

  • Нет связанных вопросов^_^