php字符串中的H2标签自动ID

时间:2011-02-13 22:22:23

标签: php string

我正在尝试编写一个自动提取内容的wordpress过滤器,并采取以下措施:

<h2>lesson 1 bannanas</h2>

并将其替换为

<h2 id="lesson-1-bannanas">lesson 1 bannanas</h2>

然后,我可以将人们直接链接到页面或博客帖子的各个部分。如果不采用像DOMDocument那样重的东西,我该怎么做呢?

4 个答案:

答案 0 :(得分:2)

如果你有这样的连贯输入,那么你可以使用正则表达式。在这种情况下,它既非常可接受又简单:

$html = preg_replace_callback("#<(h[1-6])>(.*?)</\\1>#", "retitle", $html);

function retitle($match) {
    list($_unused, $h2, $title) = $match;

    $id = strtolower(strtr($title, " .", "--"));

    return "<$h2 id='$id'>$title</$h2>";
}

ID转换需要更多工作。为了使正则表达式更可靠,例如,(.*?)的内部文本匹配模式可以写成([^<>]*)

答案 1 :(得分:0)

我创建了一个php函数,用于将ID自动添加到所有h2标签中。

function h2slug($text) {
    preg_match_all("|<h2(.*)>(.*)</[^>]+>|U", $text, $out, PREG_SET_ORDER);
    foreach ($out as $header) {
        $slug = slug($header[2]);
        $header[1] = preg_replace('/(?<!\S\W\w\s)(\s?)id(\s?)="(\w*\W*)"/', '' , $header[1]);
        $text = str_replace($header[0], '<h2 id="'. $slug .'"'. $header[1] .'>'. $header[2] .'</h2>', $text);
    }
    return $text;
}

使用:

<?php echo h2slug('<h2>Lesson 1 bannanas.</h2>'); ?>

导出:

<h2 id="lesson-1-bannanas">Lesson 1 bannanas.</h2>

答案 2 :(得分:-1)

另一种方式(实际上很简单,虽然它采用dom操作)是使用jQuery添加一个id,它等于h2的内容

答案 3 :(得分:-2)

您可以使用str_replace将开头的h2标签替换为包含您的ID

的标签
$tag = '<h2>My content</h2>';
$tag = str_replace('<h2>', '<h2 id = "an id">', $tag);
echo $tag;