2018年12月23日 星期日

URL 字串中含有特殊字元如 % 的處理方法

今天回覆網友關於 Arduino 傳送資料給 ThingSpeak 等物聯網伺服器遇到的問題時, 突然想起來 URL 字串中好像不能直接傳送一些特殊字元例如 %, 否則所傳送的網址將斷在特殊字元處而不完整, 例如傳送百分比資訊時 :

action?temperature=25.3&humidity=78%&pressure=120.3

伺服器將收到如下 request 字串 :

action?temperature=25.3&humidity=78

亦即 % 之後的資訊都收不到.

一時忘記我記錄在哪兒, 查詢 blogger 終於找到了, 是在下面這兩篇的 Q&A 中, 為了便於搜尋, 我特地記錄下來 :

利用網頁控制 Arduino (二)
使用 ESP8266 傳送 Twitter 訊息

URL 字串中 % 字元有特殊用途 (表示編碼), 要傳送 '%' 字元本身要改用 '%25', 而跳行則要改用 '%0d%0a'. 參考 :

# http://www.convertstring.com/zh_TW/EncodeDecode/UrlEncode
# https://openhome.cc/Gossip/Encoding/URLEncoding.html

"在URI的規範中定義了一些保留字元(Reserved character),像是「:」、「/」、「?」、「&」、「=」、「@」、「%」等字元,在URI中都有它的作用,如果你要在請求參數上表達URI中的保留字元,必須在%字元之後以十六進位數值表示方式,來表示該字元的八個位元數值。"

沒有留言 :