php preg#u replace:查找链接并向其添加#散列?

php preg#u replace:查找链接并向其添加#散列?,php,hash,preg-replace,Php,Hash,Preg Replace,我有以下结构 $output='' 实际上,$output包含多个列表项 将散列应用于每个链接href的最佳且最简单的方法是什么?如 你知道怎么解决吗 编辑:顺便说一句,它应该始终是相同的#散列,而不是像您在上面的示例中所想的那样,#something等于链接的名称。因此,每个环节都应该有一些内容 add_filter('wp_list_pages', 'add_hash'); /*Add #hash to wp_list_pages() function*/ function add_has

我有以下结构

$output='
  • '
    实际上,$output包含多个列表项

    将散列应用于每个链接href的最佳且最简单的方法是什么?如

  • 你知道怎么解决吗

    编辑:顺便说一句,它应该始终是相同的#散列,而不是像您在上面的示例中所想的那样,#something等于链接的名称。因此,每个环节都应该有一些内容

    add_filter('wp_list_pages', 'add_hash'); /*Add #hash to wp_list_pages() function*/
    function add_hash($output) {
    
            $dom = new DOMDocument();
            $dom->loadHTML($output);
    
            $a_tags = $dom->getElementsByTagName('a');
    
            foreach($a_tags as $a)
            {
                $value = $a->getAttribute('href');
                $a->setAttribute('href', $value . '#b');
            }
    
            $dom->saveHTML();
    
            return $output;
    }
    
    编辑:

    在上述代码中,您需要更改:

            $dom->saveHTML();
    
            return $output;
    }
    
    致:


    您应该尝试调整插入#散列的列表生成代码,而不是修改连接的结果。这不起作用!当我尝试
    回显$value时
    在foreach循环内部,它工作得很好,但是当我尝试
    echo$a页面的其余部分无法获得输出。我的控制台告诉我
    PHP致命错误:调用未定义的方法DOMNodeList::setAttribute()
    @mathiregister:你能用你尝试过的确切代码编辑你的问题吗?编辑我的帖子了吗。如果我没有在循环中回显任何内容,比如我问题中的编辑,所有内容都会正确输出,但没有#hash.Perfect。我试过了,但是。。。无论什么现在一切正常。感谢您提供的绝妙解决方案。
            $dom->saveHTML();
    
            return $output;
    }
    
            return $dom->saveHTML();
    }