2013-11-23 47 views
0

我使用這些代碼行來保護我的網站的baseURI和requestURI。這些線路究竟做了什麼?我知道他們用/以某種方式取代周圍的東西。Perl正則表達式用於路徑清理PHP

$baseURI = preg_replace('&/+&', '/', rtrim($baseURI, '/')).'/'; 
$requestURI = preg_replace('&/+&', '/', rtrim($_SERVER['REQUEST_URI'], '/')).'/'; 
$requestURI = preg_replace('&\?.*?$&', '', $requestURI); 

回答

2

第一行和第二行的目標是消除重複的連續的斜槓,並確保以斜線串面漆:

rtrim($baseURI, '/') # remove leading slashes 
&/+& # looks for one or more slashes anywhere in the string 
     # to replace them by an unique slash 

然後替換結果右側concatened用/

可以更換這些線路由:

$baseURI = preg_replace('~/+|[^/]\K$~', '/', $baseURI); 
$requestURI = preg_replace('~/+|[^/]\K$~', '/', $_SERVER['REQUEST_URI']); 

(其中\K刪除比賽從比賽結果的開始)

最後一行中刪除從第一個問號的所有內容(包括)字符串的結尾:

\? # literal ? 
.*? # all character zero or more time with a lazy quantifier (that is totally useless) 
$ # end of the string 

您可以替換這行:

$requestURI = preg_replace('~\?.*$~', '', $requestURI); 

$arr = explode('?', $requestURI); 
$requestURI = $arr[0]; 

重要提示:如果我沒有理解這一切的好目標,第三行必須在第二個之前從放置,因爲它會刪除所有(包括斜槓)問號。更好的選擇是通過更換這些最後兩行:

$requestURI = preg_replace('~/+|(?:\?.*|[^/]\K)$~', '/', $_SERVER['REQUEST_URI']); 

注2:這裏使用正則表達式模式是非常基本的。看看simple tutorialmaking some tests不是一個壞主意。

+0

+1使'\ K'亮。 –

+0

謝謝:)我仍然很難完全理解所有的正則表達式,但我想我可以弄明白。 – user3013222