2010-07-13 126 views
2

我已經提出了一個應用程序,用JS和PHP逃脫「+」

你寫了一些文本,並且文本將被保存在ajax上。在發送請求之前,我用js逃脫了它。但不知何故,「+」字符將被轉換爲「」空格字符...

所以我tryed尋找和發送之前替換「%加%」,但我得到THES錯誤消息:

未捕獲語法錯誤:無效的正則表達式:/ + /:沒有重複

代碼:

var replace = "%plus%"; 
      while(title.search(sign) != -1) { 
       title.replace("+", replace); 
      } 

也許有些人知道這個更好的解決方案。我使用UTF-8 ...和德語文字工作像「ä」我也有問題與「€」,同時從數據庫獲取它在Ajax ...和很多其他字符....

我有很大的成績,如果我rawescape()在PHP和JS UNESCAPE()(但仍與€問題 - >%u20AC

需要幫助:)

回答

6

So i tryed to find and replace before sending in "%plus%"

這是不夠的。如果您無法對+符號進行網址編碼,您幾乎可以肯定會忘記對任何內容進行網址編碼,並且還有許多其他字符會導致失敗,如果沒有進行網址編碼而不是加號。

您需要在創建請求時使用encodeURIComponent()編碼參數內的特殊字符:

var url= 'something?param='+encodeURIComponent(param)+'&other='+encodeURIComponent(other); 

否則,不適合在URL中的任何字符會導致腐敗,包括+(這意味着如果一個空間包含在查詢參數中;對於真實加號,您需要%2B)和許多其他標點符號以及所有非ASCII字符(例如,使用UTF-8編碼的應爲%E2%82%AC)。

請勿在任何情況下使用JavaScript escape()unescape()函數。這些不是URL編碼,而是JavaScript特有的非標準編碼,與URL編碼類似但不兼容。特別是所有非ASCII字符都會被破壞,這就是爲什麼不起作用。

4

要在正則表達式中匹配+,您需要轉義它,因爲+本身是一個特殊字符。

return theText.replace(/\+/g, "%plus%"); 

順便說一句,的+正確的編碼是%2b。您可以在Javascript中使用encodeURIComponent。 (不要使用escape,已棄用。)

+0

encodeURIComponent這是我的問題的解決方案!謝謝。 – 2010-07-13 14:39:22

+0

但現在我有德文字符的問題,一個函數必須在PHP中使用? – 2010-07-13 14:48:38

+0

@Fincha:什麼問題? – kennytm 2010-07-13 15:47:37