URL中的轉(zhuǎn)義字符
當URL的參數(shù)中出現(xiàn)諸如+,空格,/,?,%,#,&,=等特殊字符串符號時,因為上述字符有特殊含義,導致服務(wù)器端無法正確解析參數(shù),如何處理?解決辦法:將這些字符轉(zhuǎn)化成服務(wù)器可以識別的字符。
如果要在URL中傳遞特殊符號的原本意義,要對他們進行編碼。編碼的格式為:%加字符的ASCII碼(16進制),例如空格的編碼值是"%20"。
URL中特殊符號的用途及普通意義的編碼
| + | URL 中+號表示空格 | %2B |
| 空格 | URL中的空格可以用+號或者編碼 | %20 |
| / | 分隔目錄和子目錄 | %2F |
| ? | 分隔實際的URL和參數(shù) | %3F |
| % | 指定特殊字符 | %25 |
| # | 表示書簽 | %23 |
| & | URL 中指定的參數(shù)間的分隔符 | %26 |
| = | URL 中指定參數(shù)的值 | %3D |
HTML中的轉(zhuǎn)義字符
轉(zhuǎn)義字符串(Escape Sequence)也稱字符實體(Character Entity)。在HTML中,“<”和“>”符號用來表示HTML標簽,不能當作普通的符號來使用。如果要在HTML文檔中使用這些特殊符號原有的意義,就需要定義對應的轉(zhuǎn)義字符串。當瀏覽器遇到這類轉(zhuǎn)義字符時就會解釋為真實的字符而不是特殊用途。另外有些字符在ASCII字符集中沒有文字代號,只能用轉(zhuǎn)義字符串來表示,如回車換行符,退格鍵等。
| 字符 | 十進制 | 轉(zhuǎn)義字符 |
| " | " | " |
| & | & | & |
| < | < | < |
| > | > | > |
| 不斷開空格(non-breaking space) |
|
|
JavaScript中的轉(zhuǎn)義
JavaScript 中有些字符有特殊用途,如果字符串中想使用這些字符原來的含義,需要使用反斜杠對這些特殊符號進行轉(zhuǎn)義。
正則中也有需要轉(zhuǎn)義的字符:* . ? + $ ^ [ ] ( ) { } | / /,也是通過/反斜杠進行轉(zhuǎn)義。但是中括號里并不是元字符,不需要轉(zhuǎn)義。
在js中字符串形式的正則表達式匹配一個反斜杠要用四個反斜杠'////', 第一個斜杠是js字符串的轉(zhuǎn)義符,第二個斜杠是斜杠本身,第三個斜杠是js字符串的轉(zhuǎn)義符,第四個斜杠是斜杠本身。將第二、四個反斜杠轉(zhuǎn)為正則中的斜杠后,前面一個為正則中的轉(zhuǎn)義符,將后者變?yōu)槠胀ǚ枴W址问降恼齽t表達式里的斜杠也是特殊符號,若要當普通符號使用,也需要轉(zhuǎn)義,用“//”標示。因為js中反斜扛為特殊符號(轉(zhuǎn)義字符),js字符串里面表示斜杠需要一次轉(zhuǎn)義:“//”。
在比如:字面量形式//{.*/}/---->字符串形式'//{.*//}'。因為{號為正則中的特殊符號,需要加/轉(zhuǎn)義,而字符串中的/又是js中的特殊符號,需要再加一個/進行轉(zhuǎn)義。
注意正則的字面量形式只需要對正則中的特殊符號轉(zhuǎn)義,不需要對js的特殊符號轉(zhuǎn)義。
| 代碼 | 輸出的普通字符 |
| /' | 單引號 |
| /" | 雙引號 |
| /& | 和號 |
| // | 反斜杠 |
| /n | 換行符 |
| /r | 回車符 |
| /t | 制表符 |
| /b | 退格符 |
| /f | 換頁符 |
js中對字符串進行編碼的方法
1.encodeURI()把字符串作為 URI整體進行編碼,所以URI組件中的特殊分隔符號(;/:@&=+$?#),encodeURI() 函數(shù)不會進行轉(zhuǎn)義。該方法不會對 ASCII 字母和數(shù)字進行編碼,也不會對這些 ASCII 標點符號進行編碼: - _ . ! ~ * ' ( )
新聞熱點
疑難解答