`
让往事都随风
  • 浏览: 67152 次
  • 性别: Icon_minigender_1
  • 来自: 上海
最近访客 更多访客>>
社区版块
存档分类
最新评论

escape、encodeURI 與 encodeURIComponent 的比較

阅读更多
很多情況下, 我們需要將資料傳送到別的網頁, 都需要先將資料編碼後送出。由於使用者輸入的資料千奇百怪, 如果沒有編碼, 很可能在接收頁面就出現錯誤。尤其在現在的網站幾乎都大量運用 Ajax, 使用 Ajax 來傳值幾乎是家常便飯。所以這三個 javascript 的 method 就一定要知道如何運用及使用時機了。

一般情況下, 最好選擇 encodeURIComponent()。

以下就簡單說一下差異點:
方法一: escape()
不編碼的符號包括: @*/+
escape 不編碼 + (加號), 將使表單欄位資料中有空白的處理(用 + 連結字串)造成問題。且 escape 在處理非 ASCII 語系的字元會有問題。所以, 除非特例, 應盡量避免使用 escape()。

方法二: encodeURI()
不編碼符號包括: ~!@#$&*()=:/,;?+'
用 encodeURI() 會比使用 escape() 轉換 URI 正確。比較要注意的是這個方法不處理 ' (單引號)。

方法三: encodeURIComponent()
不編碼符號包括: ~!*()'
encodeURIComponent() 是適合大部分單一 URI 的編碼方法。這個方法通常可以正確的編出正確的編碼, 例如要編碼一段有 flash 的 html(參數有 & 符號), 如果用其他的方法, 大概解碼後 flash 也不能看了。比較要注意的是這個方法也不處理 ' (單引號)。

奇怪, 我總是一開始都用了最不合適的方法。最早的時候我開始處理 encoding 我就用 escape(), 不過 escape 在 utf-8 的網頁中, 很容易就會出錯。後來就改用 encodeURI(), 沒有想到就又遇到要傳有 & 符號...終於, 最後用了 encodeURIComponent()。不過, 從錯誤中也可以學習到很多的東西。
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics