nodejs客戶端請求url位址,服務端獲取亂碼

2021-09-25 11:36:43 字數 1525 閱讀 5106

nodejs處理url中的百分號編碼

寫**的時候,前端表單傳送資料到nodejs伺服器,傳送的資料會出現一些亂碼,像下面這樣:

nickname=%e5%b0%8f%e5%88%98&gender=%e7%94%b7&email=12345%40qq.com&password=xiaoliu

百分號編碼原理

上網查了後發現,百分號編碼(也被稱為uri編碼)的產生是為了防止sql注入,所以將一些特殊字元轉換為對應的百分號編碼。詳細原理可以去看下面的部落格。

url 編碼(percentcode 百分號編碼)

nodejs如何解碼

這裡主要講幾種百分號編碼nodejs環境下的解碼方式。

decodeuri()函式

let url = "nickname=%e5%b0%8f%e5%88%98&gender=%e7%94%b7&email=12345%40qq.com&password=xiaoliu"

let decode_url = decodeuri(url)

console.log(decode_url)

控制台列印出來的結果如下:

'nickname=小劉&gender=男&email=12345%40qq.com&password=xiaoliu'

可以看到「%40」(也就是「@」)沒有轉換,這是因為「@」在encodeuri()函式中屬於保留字元,不會轉換換為百分號編碼,所以對應的解碼函式decodeuri()也不會對其進行解碼。(上面的url是edge瀏覽器提交表單的時候產生的,其他幾個主流的瀏覽器不知道「@」符號會不會被編碼)

decodeuricomponent()函式

「@」「#」「$」…等符號不屬於encodeuricomponent()函式的保留字,所以其對應的解碼函式decodeuricomponent()函式可以將「%40」轉為「@」符號。

let url = "nickname=%e5%b0%8f%e5%88%98&gender=%e7%94%b7&email=12345%40qq.com&password=xiaoliu"

let decode_url = decodeuricomponent(url)

console.log(decode_url)

控制台的輸出如下:

'nickname=小劉&gender=男[email protected]&password=xiaoliu'

解碼成功!

自己寫解碼函式

這個大家可以看看,理解一下解碼的過程,其實挺簡單的。

function decode(url) 

return url

}

先將編碼段用正則表達示匹配出來,存在code陣列中。然後將code陣列中的**段去掉百分號,形成的十六進製制編碼段再轉換為對應的編碼(這裡頁面的編碼為utf-8,有時候頁面編碼可能是gb2312,注意區分清楚),最後用生成的字元替換url中的百分號編碼。

nodejs使用http客戶端傳送請求

這裡使用乙個第三方模組,needle,其使用方式比nodejs自帶的http模組好用。package.json依賴 dependencies 在檔案頭部引用模組 const needle require needle 請求引數,json格式 const allparams needle.reques...

nodejs建立本地服務響應客戶端請求

本地服務響應乙個純文字給客戶端 console.log 服務執行在本地3000埠 在瀏覽器輸入本地埠檢視資訊 伺服器響應json請求 console.log 服務執行在本地3000埠 服務端響應html 新建html檔案index.html 使用流的方式讀取檔案,然後用管道的形式返回 var onr...

servlet如何獲取請求客戶端的IP位址

但是request.getremoteaddr 這種方法在大部分情況下都是有效的。但是在通過了apache,squid等反向 軟體就不能獲取到客戶端的真實ip位址了。如果使用了反向 軟體,將的url反向 為的url時,用request.getremoteaddr 方法獲取的ip位址是 127.0.0...