在express4.x中使用req.params读取URL中的参数,当参数为中文时,req.url输出的中文为十六进制,而req.params输出的确是中文,我想问一下使用req.params是不是调用了什么或是默认哪种解码方式
PHP中文网2017-04-17 15:17:49
肯定是UTF-8編碼,因為目前官方node只支援UTF-8一種多位元組編碼方式,utf-8中一個漢字由三個位元組構成,你觀看url中16進位編碼正好是12個字節,透過這個也可以驗證。
req.body req.query req.params 把轉碼的多位元組都會反轉回來。
PHP中文网2017-04-17 15:17:49
這個是urlencode。用url-safe的字符集進行編碼的。
js裡用encodeURI
和decodeURI
進行編碼解碼的。其他語言也提供了類似的方法。
encodeURI('解码问题') // => '%E8%A7%A3%E7%A0%81%E9%97%AE%E9%A2%98'
decodeURI('%E8%A7%A3%E7%A0%81%E9%97%AE%E9%A2%98') // => '解码问题'
題外
當url中出現不允許出現的字元(例如
空格符),或字元集是US-ASCII的超集的時候,使用UTF-8編碼(極特殊情況,曾使用UTF-16編碼,現已不用),使用%XX
的形式表示其編碼資料。參見標準RFC3986。
望採納。