編碼相關(guān)
對(duì)工作中遇到相關(guān)的編碼問(wèn)題的一個(gè)總結(jié)。
編碼出現(xiàn)的環(huán)境
- 直接顯示在頁(yè)面
- 在script 標(biāo)簽中
- 在頁(yè)面事件中
- 在innerHTML 的語(yǔ)境
- 在頁(yè)面鏈接的url中
- 提交url參數(shù)處理
- js 獲取url參數(shù)值的時(shí)候
處理辦法
1.對(duì)于要顯示在頁(yè)面中的數(shù)據(jù),這個(gè)時(shí)候要防止標(biāo)簽的自閉合,以及屬性中單引號(hào)和雙引號(hào)。
- "<" ---> "<";
- ">" ---> ">";
- ' ---> ";
- " ---> ';
2.在JavaScript中單引號(hào)和雙引號(hào)中都是表示字符串,并沒(méi)有什么區(qū)別。
- ' ---> '
- " ---> "
- \ ---> \
- / ---> /
3.在頁(yè)面事件中、在innerhtml的語(yǔ)境中。
這類語(yǔ)境涉及到了頁(yè)面html和js環(huán)境,先進(jìn)行js轉(zhuǎn)義,然后再進(jìn)行html轉(zhuǎn)義。
4.頁(yè)面url中
這類比較復(fù)雜,url中本身涉及到很多的特殊字符,此外也會(huì)涉及到html 和js 環(huán)境中的賦值的情況,
特別注意,url 編碼和html的編碼是不一樣的,見(jiàn)后文附錄url編碼表和html編碼表
- 在html 和js環(huán)境中,需要轉(zhuǎn)義的字符為: ” ,' ,<,>,\ ,/
- 在其他環(huán)境中,需要轉(zhuǎn)義的字符為:+,空格,?,=,&,#, %
這類字符的轉(zhuǎn)義如下:
” ---> %22;
' ---> %22;
< ---> %3C
">" ---> %3E
\ ---> %5C
/ ---> %2F
"+" ---> %2b
空格 ---> %20
? ---> %3F
= ---> %3D
& ---> %26
"#" ---> 23
"%" ---> %25
提交url 參數(shù)的處理:
- Form表單提交方式:
不需要做任何處理,表單會(huì)依照頁(yè)面的編碼進(jìn)行編碼
- ajax的提交:
因?yàn)閍jax的提交的時(shí)候,是拼接成url的方式提交給后端的,所以必須要考慮對(duì) +,空格,?,=,&,#, % 的轉(zhuǎn)義,通常使用 encodeURIComponent進(jìn)行轉(zhuǎn)義
- js 獲取url參數(shù)的值的時(shí)候
- 得到url中的參數(shù)值的時(shí)候,首先必須要進(jìn)行decodeURIComponent的轉(zhuǎn)碼才能使用,因?yàn)閡rl中的一些特殊字符都經(jīng)過(guò)了編碼
- 將url的值設(shè)置到一些參數(shù)上時(shí),比如隱藏表單上的value值的時(shí)候(作提交refer),需要進(jìn)行encodeURIComponent 編碼