Encoding

在處理和傳輸字元資料時,經常需要使用不同的編碼標準和技術來確保資料的正確性和安全性。以下是常見的編碼技術

  • 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進位: &#xentityNumber; , &#x開頭;結尾,以編號的形式描述字元。


HTML中常見的字元實體

顯示結果描述實體名稱實體編號(10進位)實體編號(16進位)
 空格&nbsp;&#160;&#x20;
<小於&lt;&#60;&#x3C;
>大於&gt;&#62;&#x3E;
&和号&amp;&#38;&#x26;
雙引号&quot;&#34;&#x22;
單引號&apos; (IE不支持)&#39;&#x27;

更多字符對照表可參考: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

refer
https://home.unicode.org


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