2014-09-30 115 views
9

使用Express的URL參數功能時,似乎參數會自動解碼。也就是說,百分比編碼的實體被解析爲它們的正常形式。 %20被替換爲空格。Express URL參數功能不會解碼加號(+)作爲空格

但是,加號+未被空格替換。這大概是因爲Express在內部使用decodeURIComponent(),這也不能代替帶空格的+。簡單的示例代碼:

app.get('/:sourceFile', function (req, res, next) { 
    console.log(req.params.sourceFile); 
}); 

如果要求/test%20test,那麼你得到的控制檯上test test。如果你要求/test+test,那麼你在控制檯上得到test+test

有沒有辦法在Express 4中更改這種操作模式?這是一個錯誤?

+0

解碼目前是(4.9.5)[在router/layer.js中定義](https://github.com/strongloop/express/blob/4.9.5/lib/router/layer.js# L131-L151),如你猜測的那樣,使用'decodeURIComponent()',我沒有看到任何修改這個行爲的選項('decode_param'被定義,並且只在模塊範圍內作爲本地引用)沒有PR。 – 2014-09-30 03:22:05

+1

@JonathanLonowski感謝您深入研究。我想我可以用'%20'來創建一些中間件來替換'+',但這有點不方便。 – Brad 2014-09-30 03:23:28

+0

你有沒有想出一個解決方案? – loveNoHate 2015-02-06 08:03:08

回答

1

您正試圖使用​​+來表示請求的「URI部分」中的空格。你不能那樣做。加號僅在查詢字符串中被轉換爲空格。

這不是一個錯誤。在URI規範中(第12/13頁https://tools.ietf.org/html/rfc3986),加號是一個保留字符,不應被翻譯爲空格。