2010-07-22 3 views
1

В моем приложении мне нужно закодировать строку с помощью base64, избежать возможных специальных символов и поместить их в URL-адрес.Rails: base64 и проблема с экранированием символов

я сделать следующее:

string = "[email protected]" 

enc = OpenSSL::Cipher::Cipher.new('DES-EDE3-CBC') 
enc.encrypt('dummy_salt') 
encoded = URI.escape(Base64.encode64(enc.update(string) << enc.final)) 

Проблема заключается в том, что каким-то образом URI.escape не избежать '/' характер. Это совершенно неприемлемо, если кодированная строка предназначена для использования в качестве параметра URL.

Каким образом URI.escape игнорирует escape '/'? Должен ли я пользователь любой другой .escape, затем один, который поступает из URI? Или я должен использовать другой метод кодирования (не так ли)?

Любые предложения относительно кода также приветствуются.

ответ

3

Используйте CGI.escape вместо :-)

require 'cgi' 
puts CGI.escape('/') # => "%2F" 
+0

блестящий, благодаря – gmile

0

Если вам нужно бежать HTML вы можете также сделать:

CGI::escapeHTML('Usage: foo "bar" <baz>') 

"Usage: foo &quot;bar&quot; &lt;baz&gt;"