Ruby: заменить некоторые символы в диапазоне ASCII их шестнадцатеричным представлением - PullRequest
2 голосов
/ 28 апреля 2011

Мне нужно заменить некоторые символы ascii, такие как @ и &, на их шестнадцатеричные представления для URL, которые будут 40 и 26. соответственно.

Как я могу сделать это в ruby?Есть также некоторые символы, в первую очередь «-», которые не нужно заменять.

Ответы [ 4 ]

1 голос
/ 28 апреля 2011

Это рубин, поэтому есть 20 обязательных способов сделать это. Вот мой:

>> a = 'one&two%three'                                                  
=> "one&two%three"                                                      
>> a.gsub(/[&%]/, '&' => '&'.ord, '%' => '%'.ord)                       
=> "one38two37three"  
1 голос
/ 28 апреля 2011
require 'uri'
URI.escape str, /[@&]/

Очевидно, что вы можете расширить регулярное выражение с помощью большего количества символов, которые хотите убежать.Или, если вы хотите использовать белый список, вы можете, скажем,

URI.escape str, /[^-\w]/
0 голосов
/ 09 февраля 2012

Более обобщенно и легко:

require 'uri'
URI.escape(your_string,Regexp.new("[^#{URI::PATTERN::UNRESERVED}]")
0 голосов
/ 28 апреля 2011

Я уверен, что в Ruby эта функция встроена для URL.Однако, если вы хотите определить более общие средства перевода, вы можете использовать код, подобный следующему:

s = "h@llo world"
t = { " " => "%20", "@" => "%40" };
puts s.split(//).map { |c| t[c] || c }.join

, который будет выводить

h%40llo%20world

В приведенном выше коде t - этохеш, определяющий отображение от определенных символов до их представления.Строка разбивается на символы, и в хэше выполняется поиск эквивалента каждого символа.

...