Rails: base64 и проблема с экранированием символов - PullRequest
1 голос
/ 22 июля 2010

В моем приложении мне нужно кодировать строку через base64, экранировать возможные специальные символы и помещать ее в URL.

Я делаю следующее:

string = "random_email@server.com"

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, кроме того, который приходит из URI?Или я должен даже использовать другой метод кодирования (не думаю)?

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

Ответы [ 2 ]

3 голосов
/ 22 июля 2010

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

require 'cgi'
puts CGI.escape('/') # => "%2F"
0 голосов
/ 22 июля 2010

Если вам нужно выйти из html, вы также можете сделать:

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

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