2010-05-14 61 views
11

我正在開發一個Web應用程序,我必須在代碼的JavaScript端和Ruby後端對字符串進行編碼和解碼。唯一的問題是JavaScript和Ruby的轉義方法有一點小差異。在JavaScript中," "被視爲"%20",但在紅寶石中," "被編碼爲"+"如何在JavaScript和Ruby中對原始URL進行編碼/解碼以在兩者中獲得相同的值?

有什麼辦法解決這個問題?另一個Ruby方法在原始URL編碼中對字符串進行編碼?

經過一些硒測試後,我注意到由於某種原因,URI.unescape"£""?"之間混合。如果我在JavaScript中使用encodeURIComponent("£");,然後在Ruby中使用URI.unescape("%C2%A3"),這是我們在編碼"£"符號時得到的值,我得到返回的"?"符號。任何解決方案

回答

30

使用

URI.escape(foo, Regexp.new("[^#{URI::PATTERN::UNRESERVED}]")) 
紅寶石

,並

encodeURIComponent(foo); 

在JavaScript

這兩個都同樣表現和編碼空間爲%20。

+0

感謝,但由於某些原因, 「URI.escape(FOO,Regexp.new([^#{URI :: PATTERN ::毫無保留}]」))」不工作對我來說,它提供了一個錯誤和頁面無法加載時,它調用它。我已經要求'uri'在類的頂部。謝謝 – 2010-05-14 14:30:19

+0

我只在一個.rb文件中嘗試過,像一個魅力那裏工作.. – 2010-05-14 14:31:29

+0

剛剛得到它工作,我是白癡,我是在unescape中有Regexp.new(「[^#{URI :: PATTERN :: UNRESERVED}]」)以及當你一直在看代碼時會發生什麼現在可以正常工作了 – 2010-05-14 14:45:20

-1
require "uri"; 
puts URI.escape "1 2;", Regexp.new("[^0-9a-z\\-_.!~*'()]", "i"); 
相關問題