2017-02-08 155 views
3

用戶可以搜索我的網站。有時,他們可能會使用包含正斜槓(使用/斜槓進行搜索)的搜索詞,該搜索詞在由表單提交時會變成URL中的%2F。如何在laravel 5 url中傳遞正斜槓(%2F)並添加參數

例如。 www.mysite.com/search/search+with+%2F+slash

我從here偉大的工程中使用的答案給我正確的網頁,而不是送我去404

我現在的問題是我使用分頁頁面和自定義過濾器這兩者都是通過就像在url中獲取變量,並在訪問GET變量時它是空的。

例如。 www.mysite.com/search/search+with+%2F+slash?page=2

這是我目前的路線

$this->get('search/{search_term}', ['uses' => '[email protected]']) 
->where('search_term', '(.*(?:%2F:)?.*)'); 

不知道從這裏

+0

你不需要照顧URL中的編碼字符。這就是爲什麼我認爲你必須使用一個更簡單的正則表達式,你也必須逃避'?',我想也是。 – DanFromGermany

+0

我對正則表達式不太瞭解。也許你可以提供一個正則表達式解決方案 – Mark

回答

1

做什麼,包括URL的路徑分量的編碼斜槓(%2F)是不是一個好主意。 The HTTP RFC說,該序列應該是「相當於」真正的斜線:

比在「保留」其他

字符和「不安全」集(見 RFC 2396 [42])等價於它們的「」 %「HEX HEX」編碼。

實際上,這些URL的處理是不一致的。一些網絡服務器(甚至是某些瀏覽器!)會將%2F視爲等同於真正的斜槓,有些會以不同的方式對待它,並且某些工具(包括某些Web應用程序防火牆和代理)會拒絕包含此類順序的URL。

如果您需要在URL中包含像這樣的用戶輸入,您應該將其放入查詢字符串(/search/?q=search+with+%2f+slash)。

+0

實際上,RFC認爲它不是**相當於HEX編碼,因爲'/'是保留集的一部分。 – aross