国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

JS 中 URL 編碼的問題.

lanffy / 758人閱讀

摘要:這些字符是普通字符編碼解碼的問題既然瀏覽器會默認給進行編碼那么服務器就會默認給解碼。

URL 編碼 為什么要對 URL 編碼

1. 避免解析錯誤

我們的 queryString 的形式是使用 ?開始, key=value 傳遞參數, key-value pairs 之間使用 & 連接.
比如:

?postid=5038412&t=1450591802326

服務器會

根據 & 解析 key-value pairs
根據 = 解析 key,value

那么如果 key或者 value 中存在 =,&, 那么就會解析掛掉,
比如 寶潔公司叫做 P&G

?name=P&G&t=123456

服務器解析的時候就會解析錯誤:

name=P
G     //到這里就掛掉了

2. 避免非法字符

URL 只能使用 ASCII 字符集, 所有的非 ASCII 碼都算是非法字符.
在這個定義中, 所有的中文都算是非法字符.

URL 的編碼規則

一般使用的是 百分號編碼(percent-encoding)

規則:

是否是 ASCII 字符
    是
        取對應的字節編號, 比如 "a" 對應的是 "0x61", 那么編碼之后就是 %61
    否
        使用 utf-8 對其進行編碼
        比如"中文"使用UTF-8字符集得到的字節為 0xE4 0xB8 0xAD 0xE6 0x96 0x87,
        經過Url編碼之后得到"%E4%B8%AD%E6%96%87".
實際情景

瀏覽器會默認給 URL 編碼, 但是不同瀏覽器的編碼實現方式不一致, 所以最好的方式就是:
我們自己通過 JS 對 URL 進行編碼

JS 用來編碼的函數有 3 個:

// escape()  // 不推薦使用, 原因不明.
encodeURI()
encodeURIComponent()

encodeURI 會對整個 URL 中的非法字符編碼 (它是為了解決非法字符)
encodeURIComponent 會對所有的保留字都編碼 (解決解析錯誤的問題)

所以最終的編碼方式是:

對每一個 key-value 進行 encodeURIComponent 編碼

對整個 URL 進行 encodeURI 編碼

備注:
URL 中的字符可以分成三類:
保留字符 (reserved characters):
這類字符是URI中的保留關鍵字符,它們用于分割URI中的各個部分。
這些字符是: ;, /, ?, :, @, &, =, +, $, ,
Mark字符 (mark characters)
這類字符在RFC-2396中特別定義,但是沒有特別說明用途,可能是和別的RFC標準相關。
這些字符是:-, _, ., !, ~, *, ", (, )
普通字符

URL 編碼解碼的問題
既然瀏覽器會默認給 URL 進行編碼, 那么服務器就會默認給URL 解碼。
如果我們僅僅是對 URL 進行 encodeURI, 那么服務器在解碼的時候可以正常, 但是解析的時候依舊不能
區分 & 到底是分割符還是 value 中的一個普通字符, 所以我們需要對 key-value pairs 進行編碼的.

最終結論
使用 encodeURIComponent 避免參數解析錯誤
使用 encodeURI 避免非法字符

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/83794.html

相關文章

  • 關于URL編碼

    摘要:基本概念編碼不能直接使用需要編碼領杉果紅包,享更多優惠點擊領取問題的由來就是網址只要上網就一定會用到只有字母和數字一些特殊符號以及某些保留字才可以不經過編碼直接用于這意味著如果中有漢字就必須編碼后使用但是麻煩的是沒有規定具體的編碼方 基本概念 1.encodeComponent編碼url,url不能直接使用,需要編碼 var rlt = http://service.weibo.com...

    HitenDev 評論0 收藏0
  • 前端開發字符編碼

    摘要:當然,也可自己寫一個轉換函數,按照一定規則便行為編碼的字節,如下例中國結果中國結果結果通過簡單的函數,就可以完成編碼到編碼的轉換,進而完成寬字節字符到編碼的轉換。 前端開發過程中會接觸各種各樣的編碼,比較常見的主要是 UTF-8 和 HTML 實體編碼,但是 web 前端的世界卻不止這兩種編碼,而且編碼的選擇也會造成一定的問題,如前后端開發過程中不同編碼的兼容、多字節編碼可能會造成的 ...

    Rindia 評論0 收藏0
  • 解決url請求參數帶文時后臺獲取出現亂碼問題

    摘要:在服務器端,首先通過自動進行第一次解碼可能是等字符集對結果無影響得到字符,然后再使用進行第二次解碼,通常使用方法。 第一種方法:var url = encodeURI(url);前端js先編碼一次,后臺:String test=newString(request.getParameter(test).getBytes(iso8859-1),UTF-8); 先解碼還原成byte數組, 再...

    Fourierr 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<