php-从url获取当前页面的名称并重新格式化字符串

php-从url获取当前页面的名称并重新格式化字符串,php,string,url,url-rewriting,str-replace,Php,String,Url,Url Rewriting,Str Replace,我有以下代码:(1)从url获取页面/节名(2)清理字符串,然后将其分配给变量 我想知道是否有任何建议,我可以如何改进这段代码,使之更有效,可能更少的if/else语句 另外,还有任何建议,我可以如何编码它,使其占到url结构中x数量的子目录。现在我用一种非常手动的方式检查多达3个 我希望它能够处理任何url,例如:www.domain.com/level1/level2/level3/level4/levelx/ 这是我目前的代码: <?php $prefixName = 'w

我有以下代码:(1)从url获取页面/节名(2)清理字符串,然后将其分配给变量

我想知道是否有任何建议,我可以如何改进这段代码,使之更有效,可能更少的if/else语句

另外,还有任何建议,我可以如何编码它,使其占到url结构中x数量的子目录。现在我用一种非常手动的方式检查多达3个

我希望它能够处理任何url,例如:www.domain.com/level1/level2/level3/level4/levelx/

这是我目前的代码:

<?php

    $prefixName = 'www : ';
    $getPageName = explode("/", $_SERVER['PHP_SELF']);
    $cleanUpArray = array("-", ".php");

    for($i = 0; $i < sizeof($getPageName); $i++) {
        if ($getPageName[1] == 'index.php')
        {
            $pageName = $prefixName . 'homepage';
        }
        else
        {
            if ($getPageName[1] != 'index.php')
            {                   
                $pageName = $prefixName . trim(str_replace($cleanUpArray, ' ', $getPageName[1]));
            } 
            if (isset($getPageName[2]))
            {
                if ( $getPageName[2] == 'index.php' )
                {
                    $pageName = $prefixName . trim(str_replace($cleanUpArray, ' ', $getPageName[1]));
                }               
                else
                {
                    $pageName = $prefixName . trim(str_replace($cleanUpArray, ' ', $getPageName[2]));
                }
            }
            if (isset($getPageName[3]) )
            { 
                if ( $getPageName[3] == 'index.php' )
                {
                    $pageName = $prefixName . trim(str_replace($cleanUpArray, ' ', $getPageName[2]));
                }               
                else
                {
                    $pageName = $prefixName . trim(str_replace($cleanUpArray, ' ', $getPageName[3]));
                }
            }   
        }           
    }
?>

您当前正在为-循环使用一个
,但没有为任何事情使用
$i
迭代器-因此,对我来说,您可以完全放弃循环。据我所见,您只希望文件前面的目录名为
$pageName
,如果没有前面的目录,则将其设置为
主页

您可以通过
$\u SERVER['PHP\u SELF']
来获取确切的文件名,而不是检查索引,还可以像当前一样在
/
上拆分以获取“最后一个目录”。要获取最后一个目录,可以跳过索引并直接使用


我发现这段代码非常有用

$protocol = strpos(strtolower($_SERVER['SERVER_PROTOCOL']),'https') === 
FALSE ? 'http' : 'https';            // Get protocol HTTP/HTTPS

$host     = $_SERVER['HTTP_HOST'];   // Get  www.domain.com

$script   = $_SERVER['SCRIPT_NAME']; // Get folder/file.php

$params   = $_SERVER['QUERY_STRING'];// Get Parameters occupation=odesk&name=ashik

$currentUrl = $protocol . '://' . $host . $script . '?' . $params; // Adding all

echo $currentUrl;

在您的url方案中使用分隔符代替“?”,您可以按自己的意愿进行深度搜索。你能更清楚地解释一下你想要的是什么样的输出吗?这个问题可能也是关于感谢Herbert的主题,他不知道新网站的存在。我非常喜欢这个解决方案,但它忽略了实际的页面名,即www.domain.com/subdir/my-page.php,pagename将是subdir,所以忽略my-page.php。我希望它是www:subdir:mypage@taulant“文件名”在变量
$script
中,它是通过
basename()
命令获得的。您可以随意使用/格式化它(例如使用
$pageName.=':'.trim(str_replace($cleanUpArray,,$page));
)。
} else if ($count > 1) {
    // we are in a sub-directory; "breadcrumb" them all together
    $pageName = '';
    $separator = ' : ';
    foreach ($exploded as $page) {
        if ($page == '') continue;
        $pageName .= (($pageName != '') ? $separator : '') . trim(str_replace($cleanUpArray, ' ', $page));
    }
    $pageName = $prefixName . $pageName;
} else {
$protocol = strpos(strtolower($_SERVER['SERVER_PROTOCOL']),'https') === 
FALSE ? 'http' : 'https';            // Get protocol HTTP/HTTPS

$host     = $_SERVER['HTTP_HOST'];   // Get  www.domain.com

$script   = $_SERVER['SCRIPT_NAME']; // Get folder/file.php

$params   = $_SERVER['QUERY_STRING'];// Get Parameters occupation=odesk&name=ashik

$currentUrl = $protocol . '://' . $host . $script . '?' . $params; // Adding all

echo $currentUrl;