将网址(包含点)转换为相对网址


Convert url (contains dots) to relative

是否有任何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);
  }
?>