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()。不過, 從錯誤中也可以學習到很多的東西。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值