Php 当解析查询字符串时,面包屑菜单复制链接

Php 当解析查询字符串时,面包屑菜单复制链接,php,regex,breadcrumbs,Php,Regex,Breadcrumbs,我已经创建了一个面包屑菜单,它获取页面URL,分解每个尾部斜杠(域后)后的文本并打印出来 如果没有向URL添加任何查询字符串,则此操作可以正常工作,但是,一旦添加了查询,它将复制链接: 工作示例: <?php $url = "/parent/child"; // 1. Get URL $crumbs = explode("/", trim($url, '/')); // 2. Strip extras $build = ''; // 3. D

我已经创建了一个面包屑菜单,它获取页面URL,
分解每个尾部斜杠(域后)后的文本并打印出来

如果没有向URL添加任何查询字符串,则此操作可以正常工作,但是,一旦添加了查询,它将复制链接:

工作示例:

<?php
    $url = "/parent/child";
    // 1. Get URL
    $crumbs = explode("/", trim($url, '/'));
    // 2. Strip extras
    $build = '';
    // 3. Define int so last item is not a link
    $lastKey = count($crumbs) - 1;
    // 4. Execute loop
    foreach($crumbs as $key => $crumb){
        $build .= '/'.$crumb;
        // format text 
        $crumb = ucfirst(str_replace(array(".php","_"),array(""," "),$crumb) . ' ');
        $crumb = preg_replace('/-/', ' ', $crumb); // remove dashes
        $crumb = trim($crumb); // remove whitespace from before and after string

        $pagename = "child";  

        echo $key < $lastKey
            ? "$crumb /" : $pagename;
    }
?>
$crumbs = explode("/", trim($_SERVER["REQUEST_URI"], '/'));
$crumbs = preg_replace('/\?.*/', '', $crumbs);
<?php

    // 1. Get current URL
    $crumbs = trim($_SERVER["REQUEST_URI"]);
    $crumbs = preg_replace('/\?.*/', '', $crumbs);
    $crumbs = explode("/", $crumbs);
    array_filter($crumbs);


    $count = count($crumbs);
    $build = '';

    // 3. Define int so last item is not a link
    $lastKey = count($crumbs) - 1;

    // 4. Execute loop
    foreach($crumbs as $key => $crumb){
        $build .= $crumb;

        // format text 
        $crumb = ucfirst(str_replace(array(".php","_"),array(""," "),$crumb) . ' ');
        $crumb = preg_replace('/-/', ' ', $crumb); // remove dashes
        $crumb = trim($crumb); // remove whitespace from before and after string

        $pagename = get_query_var('pagename');  
        $pagename = the_title('', '', false); // print page name as is in WP
        $pagename = preg_replace('/-/', ' ', $pagename); // remove dashes
        $pagename = trim($pagename);

        echo $key < $lastKey
            ? "<a class='crumbLink' href=".$build.">".$crumb."</a>
               <span class='slash'>/</span>"
            : $pagename;

    }


?>
这将输出:父/子/父 预期输出:**父/子**

我知道我已经设置了
$pagename=“parent”
,但我希望它忽略查询字符串

我尝试了以下方法:

<?php
    $url = "/parent/child";
    // 1. Get URL
    $crumbs = explode("/", trim($url, '/'));
    // 2. Strip extras
    $build = '';
    // 3. Define int so last item is not a link
    $lastKey = count($crumbs) - 1;
    // 4. Execute loop
    foreach($crumbs as $key => $crumb){
        $build .= '/'.$crumb;
        // format text 
        $crumb = ucfirst(str_replace(array(".php","_"),array(""," "),$crumb) . ' ');
        $crumb = preg_replace('/-/', ' ', $crumb); // remove dashes
        $crumb = trim($crumb); // remove whitespace from before and after string

        $pagename = "child";  

        echo $key < $lastKey
            ? "$crumb /" : $pagename;
    }
?>
$crumbs = explode("/", trim($_SERVER["REQUEST_URI"], '/'));
$crumbs = preg_replace('/\?.*/', '', $crumbs);
<?php

    // 1. Get current URL
    $crumbs = trim($_SERVER["REQUEST_URI"]);
    $crumbs = preg_replace('/\?.*/', '', $crumbs);
    $crumbs = explode("/", $crumbs);
    array_filter($crumbs);


    $count = count($crumbs);
    $build = '';

    // 3. Define int so last item is not a link
    $lastKey = count($crumbs) - 1;

    // 4. Execute loop
    foreach($crumbs as $key => $crumb){
        $build .= $crumb;

        // format text 
        $crumb = ucfirst(str_replace(array(".php","_"),array(""," "),$crumb) . ' ');
        $crumb = preg_replace('/-/', ' ', $crumb); // remove dashes
        $crumb = trim($crumb); // remove whitespace from before and after string

        $pagename = get_query_var('pagename');  
        $pagename = the_title('', '', false); // print page name as is in WP
        $pagename = preg_replace('/-/', ' ', $pagename); // remove dashes
        $pagename = trim($pagename);

        echo $key < $lastKey
            ? "<a class='crumbLink' href=".$build.">".$crumb."</a>
               <span class='slash'>/</span>"
            : $pagename;

    }


?>
结果仍然相同

最新代码:

<?php
    $url = "/parent/child";
    // 1. Get URL
    $crumbs = explode("/", trim($url, '/'));
    // 2. Strip extras
    $build = '';
    // 3. Define int so last item is not a link
    $lastKey = count($crumbs) - 1;
    // 4. Execute loop
    foreach($crumbs as $key => $crumb){
        $build .= '/'.$crumb;
        // format text 
        $crumb = ucfirst(str_replace(array(".php","_"),array(""," "),$crumb) . ' ');
        $crumb = preg_replace('/-/', ' ', $crumb); // remove dashes
        $crumb = trim($crumb); // remove whitespace from before and after string

        $pagename = "child";  

        echo $key < $lastKey
            ? "$crumb /" : $pagename;
    }
?>
$crumbs = explode("/", trim($_SERVER["REQUEST_URI"], '/'));
$crumbs = preg_replace('/\?.*/', '', $crumbs);
<?php

    // 1. Get current URL
    $crumbs = trim($_SERVER["REQUEST_URI"]);
    $crumbs = preg_replace('/\?.*/', '', $crumbs);
    $crumbs = explode("/", $crumbs);
    array_filter($crumbs);


    $count = count($crumbs);
    $build = '';

    // 3. Define int so last item is not a link
    $lastKey = count($crumbs) - 1;

    // 4. Execute loop
    foreach($crumbs as $key => $crumb){
        $build .= $crumb;

        // format text 
        $crumb = ucfirst(str_replace(array(".php","_"),array(""," "),$crumb) . ' ');
        $crumb = preg_replace('/-/', ' ', $crumb); // remove dashes
        $crumb = trim($crumb); // remove whitespace from before and after string

        $pagename = get_query_var('pagename');  
        $pagename = the_title('', '', false); // print page name as is in WP
        $pagename = preg_replace('/-/', ' ', $pagename); // remove dashes
        $pagename = trim($pagename);

        echo $key < $lastKey
            ? "<a class='crumbLink' href=".$build.">".$crumb."</a>
               <span class='slash'>/</span>"
            : $pagename;

    }


?>

我认为问题在于:

echo$key<$lastKey?“$crump/”:$pagename

在步骤3中:

// 3. Define int so last item is not a link
$lastKey = count($crumbs) - 1;
如果您有3个项目,$lastKey将是2,因为您计算3个项目并减去1

在循环的后面,最后一项将在$key=2中,因此:

$key = 2 < $lastKey = 2
$key=2<$lastKey=2

我们从$url中删除查询字符串怎么样

<?php
    $url ="/parent/child/";
    $url_arr = parse_url($url);
    if(isset($url_arr['query'])){
    $query = $url_arr['query'];
    $url = str_replace(array($query,'?'), '', $url);
    }
    // 1. Get URL
    $crumbs = explode("/", trim($url, '/'));
    // 2. Strip extras
    $build = '';
    // 3. Define int so last item is not a link
    $lastKey = count($crumbs) - 1;
    // 4. Execute loop
    foreach($crumbs as $key => $crumb){
        $build .= '/'.$crumb;
        // format text
        $crumb = ucfirst(str_replace(array(".php","_"),array(""," "),$crumb) . ' ');
        $crumb = preg_replace('/-/', ' ', $crumb); // remove dashes
        $crumb = trim($crumb); // remove whitespace from before and after string

        $pagename = "parent";

        echo $key < $lastKey
            ? "$crumb   /" : $pagename;
    }
?>

试试看


我认为您应该坚持您的第一个“工作”解决方案,但使用
parse\u url($url,PHP\u url\u PATH)
而不是直接使用
$url

<?php
    $url = parse_url("/parent/child?foo=bla&bar=bla", PHP_URL_PATH));
    // 1. Get URL
    $crumbs = explode("/", trim($url, '/'));
    // 2. Strip extras
    $build = '';
    // 3. Define int so last item is not a link
    $lastKey = count($crumbs) - 1;
    // 4. Execute loop
    foreach($crumbs as $key => $crumb){
        $build .= '/'.$crumb;
        // format text 
        $crumb = ucfirst(str_replace(array(".php","_"),array(""," "),$crumb) . ' ');
        $crumb = preg_replace('/-/', ' ', $crumb); // remove dashes
        $crumb = trim($crumb); // remove whitespace from before and after string

        $pagename = "child";  

        echo $key < $lastKey
            ? "$crumb /" : $pagename;
    }
?>

嗯,我已经做了一些测试,我也这么认为。有没有办法让它充满活力?也就是说,我不希望当前页面(面包屑中的最后一项)成为链接,并希望它忽略任何查询字符串。我已经尝试使用regex从URL
$crumbs=preg\u replace(“/\?*/”,“$crumbs”)中删除查询
但是,我仍然看到相同的结果?@Freddy如果您不需要查询字符串,可以使用带符号“?”的explode,并使用第一个数组作为$crumbs。如果我理解正确,我想要的是1。获取URL,2。分解该URL(在每个
/
之后)以获得所有的slug 3。使所有slug链接到这些页面,但最后一个slug除外(这将是用户当前所在的页面)。问题当然是,当一个查询字符串被传递时,它会复制我尝试的最后一个slug(我不想要这个slug)
$url=$\u SERVER[“REQUEST\u URI”]$url\u arr=parse\u url($url)$query=$url_arr['query']
但是获取
未定义索引:query
错误?我已经编辑了帖子错误出现在没有查询字符串的URL上,但是现在它可以正常工作了。