我正在尝试编写一个自动提取内容的wordpress过滤器,并采取以下措施:
<h2>lesson 1 bannanas</h2>
并将其替换为
<h2 id="lesson-1-bannanas">lesson 1 bannanas</h2>
然后,我可以将人们直接链接到页面或博客帖子的各个部分。如果不采用像DOMDocument那样重的东西,我该怎么做呢?
答案 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;