是否有任何PHP函数来清理链接+路径?即
http://example.com/fold1/fold2/fold3/../../././MyFile.HTML
to
http://example.com/fold1/MyFile.HTML
所以,我想删除点,但保持合适的(相对)正确路径。
到目前为止
我发现的是:
echo ConvertDotedPathToNormalUrl('http://example.com/directory/.././pageee.html');
法典:
function ConvertDotedPathToNormalUrl($url){
$firstType = '/(.*)'/((?:(?!'.'.).)+)'/'.'.'//si';
preg_match($firstType,$url,$result);
if (!empty($result[2])){
$url = str_replace('/'.$result[2].'/..','',$url);
if ( strstr($url,'../')){$url= ConvertDotedPathToNormalUrl($url);}
}
$url = str_replace('/./','/',$url); $url = str_replace('://','|||',$url);$url = str_replace('//','/',$url);$url = str_replace('|||','://',$url);
return $url;
}
附言但不是,它会转换
你可以
1) 使用 parse_url(..) 获取$path。
2) 得到$webroot = $_SERVER['DOCUMENT_ROOT'];
3) 获取 $zrealpath = 真实路径($webroot . $path);
<?php
define ('CRLF', "<br />'n");
$url = 'http://example.com/fold1/fold2/fold3/../../././MyFile.HTML';
$parsed = parse_url($url);
echo '---- vardump($parsed):', CRLF; // for education
zvardump($parsed);
$webroot = $_SERVER['DOCUMENT_ROOT'];
echo 'webroot = ', $webroot, CRLF;
$path = $parsed['path'];
echo 'path = ', $path, CRLF;
$zrealpath = realpath($webroot . $path);
echo 'realpath = ', $zrealpath, CRLF;
function zvardump($var1) {
ob_start();
echo "<pre style='"margin:0;'">'n";
var_dump($var1);
echo "</pre>'n";
$zoutput = ob_get_contents();
ob_end_clean();
echo str_replace("=>'n ", " => ", $zoutput);
}
?>