在處理和傳輸字元資料時,經常需要使用不同的編碼標準和技術來確保資料的正確性和安全性。以下是常見的編碼技術
- URL encoding
- HTML encoding
- javascript encoding
URL Encoding
URL Encoding(URL編碼):也稱為Percent Encoding(百分號編碼), 是特定上下文的統一資源定位符 URL的編碼機制。 URL Encoding也適用於URI(統一資源標誌符)的編碼,同樣用於 application/x-www-form-urlencoded MIME。
舉例如下
瀏覽器中進行搜尋「你好」時,連結位址會被自動編碼:
(編碼前)https://www.baidu.com/s?wd=你好
(編碼後)https://www.baidu.com/s?wd=%E4%BD%A0%E5%A5%BD
網址如有空白時,會被自動編碼
(編碼前)http://www.example.com/new pricing.html
(編碼後)http://www.example.com/new%20pricing.html
字元類型
- ASCII control characters – 通常用於輸出控制的不可列印字元。 字元範圍為00-1F十六進位(十進位0-31)和7F(十進位127)。
- Non-ASCII control characters – 這些是超過128個字元的ASCII字元集的字元。 此範圍是ISO-Latin字元集的一部分,包括ISO-Latin集合80-FF hex(十進位128-255)的整個「上半部」。
- Reserved characters – 這些是特殊字符,例如美元符號,&符號,加號,常用,正斜杠,冒號,分號,等號,問號和“at”符號。 所有這些都可以在URL中具有不同的含義,因此需要進行編碼。
- Unsafe characters – 這些是空格,引號,小於符號,大於符號,磅字符,百分比字符,左捲曲支撐,右捲曲支撐,管道,反斜杠,插入符號,Tilde,左方括號,右方括號,嚴重重音。 由於各種原因,這些字元可能會在URL中被誤解。 這些字符也應始終編碼。
Reserved characters
字元 | 編碼 |
---|---|
$ | %24 |
& | %26 |
+ | %2b |
, | %2c |
/ | %2f |
: | %3a |
; | %3b |
= | %3d |
? | %3f |
@ | %40 |
Unsafe characters
字元 | 編碼 |
---|---|
space | %20 |
“ | %22 |
< | %3c |
> | %3e |
# | %23 |
% | %25 |
{ | %7b |
} | %7d |
| | %7c |
\ | %5c |
^ | %5e |
~ | %7e |
[ | %5b |
] | %5d |
` | %60 |
完整編碼參考 https://iowiki.com/html/html_url_encoding.html
線上轉換工具
URL Encoder / Decoder tool https://appdevtools.com/url-encoder-decoder
HTML Encoding
也稱HTML Entity,在編寫HTML頁時,需要用到<
、>
、
等符號,直接輸入這些符號時,會錯誤的把它們與標記混在一起,非常不利於編碼。所以需要把這些字符進行轉義,以另一種方式抒寫,以相同的形式展現。主要特色有以下2點:
- HTML 實體是一段以連字號(&)開頭、以分號(;)結尾的字串。用以顯示不可見字符及保留字符
- 一個HTML Entity都含有2種轉義格式:Entity Name 和 Entity Number
Entity Name 實體名稱
也稱HTML Entities Encoding
格式: &entityName;
, &
開頭 ;
結尾,並以語意的形式描述字元。
Entity Number 實體編號
也稱HTML Attributes Encoding
格式10進位: &#entityNumber;
, &#
開頭;
結尾,以編號的形式描述字元。
格式16進位: ntityNumber;
, &#x
開頭;
結尾,以編號的形式描述字元。
HTML中常見的字元實體
顯示結果 | 描述 | 實體名稱 | 實體編號(10進位) | 實體編號(16進位) |
---|---|---|---|---|
空格 | |   |   | |
< | 小於 | < | < | < |
> | 大於 | > | > | > |
& | 和号 | & | & | & |
“ | 雙引号 | " | " | " |
‘ | 單引號 | ' (IE不支持) | ' | ' |
更多字符對照表可參考:https://www.freeformatter.com/html-entities.html
線上轉換工具
HTML Entity encoder tool https://appdevtools.com/html-entity-encoder-decoder
使用方式:
要勾選Encode everything
預設為16進位實體編號編碼,勾選Use decimal values 為10進位實體編號編碼
勾選Use named references以實體名稱編碼
refer
https://www.suibibk.com/topic/705147330625536000
https://www.cnblogs.com/polk6/p/html-entity.html
Javascript Encoding
JavaScript中表示某些特殊字元或字串的編碼方式,主要有以下幾種:
unicode 萬國碼
是一種全球性的文字編碼標準,旨在為世界上所有語言的文字提供統一的表示方法。它定義了每個字元唯一的碼點(一個數字)。使用 \uXXXX 的形式表示 Unicode 碼位,其中 XXXX 是 4 個十六進位數字。例如: \u0027
= '
線上轉換工具 https://checkserp.com/encode/unicode
UTF-16 十六進位
一種將 Unicode 字元編碼為 16 位元組的格式。使用 \xXX 的形式表示一個字元的十六進位 Unicode 值。例如: \xA9
refer
https://github.com/SamHwang1990/blog/issues/2
https://iming.work/detail/5b80acd70b61600062edc375.html
https://pjchender.dev/webdev/guide-unicode