我使用这些代码行来保护我的网站的baseURI和requestURI。这些线条到底是干什么的?我知道他们在某种程度上取代了周围的东西。
$baseURI = preg_replace('&/+&', '/', rtrim($baseURI, '/')).'/';
$requestURI = preg_replace('&/+&', '/', rtrim($_SERVER['REQUEST_URI'], '/')).'/';
$requestURI = preg_replace('&?.*?$&', '', $requestURI);
第一行和第二行的目标是删除重复的连续斜线,并确保字符串以斜线结束:
rtrim($baseURI, '/') # remove leading slashes
&/+& # looks for one or more slashes anywhere in the string
# to replace them by an unique slash
然后将替换结果与右侧的CCD_ 1连接。
您可以通过以下方式替换这些行:
$baseURI = preg_replace('~/+|[^/]K$~', '/', $baseURI);
$requestURI = preg_replace('~/+|[^/]K$~', '/', $_SERVER['REQUEST_URI']);
(其中K
从匹配结果中删除匹配的开始)
最后一行删除从第一个问号(include)到字符串末尾的所有内容:
? # 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:这里使用的正则表达式模式非常基本。看看一个简单的教程或做一些测试并不是一个坏主意。