php字符串中的H2标记自动ID
我正在尝试编写一个wordpress过滤器,自动浏览内容并获取以下内容:php字符串中的H2标记自动ID,php,string,Php,String,我正在尝试编写一个wordpress过滤器,自动浏览内容并获取以下内容: <h2>lesson 1 bannanas</h2> 第1课班纳纳斯 并将其替换为 <h2 id="lesson-1-bannanas">lesson 1 bannanas</h2> 第1课班纳纳斯 这样我就可以将人们直接链接到页面或博客文章的各个部分。如果不使用像DOMDocument这样沉重的东西,我怎么做呢?另一种方法(实际上很简单,尽管它使用dom操作)是使用
<h2>lesson 1 bannanas</h2>
第1课班纳纳斯
并将其替换为
<h2 id="lesson-1-bannanas">lesson 1 bannanas</h2>
第1课班纳纳斯
这样我就可以将人们直接链接到页面或博客文章的各个部分。如果不使用像DOMDocument这样沉重的东西,我怎么做呢?另一种方法(实际上很简单,尽管它使用dom操作)是使用jQuery添加一个id,它与h2的内容相等(实际上很简单,尽管它使用dom操作)正在使用jQuery添加一个id,它等于h2的内容。如果您有这样一个连贯的输入,那么您可以使用正则表达式。在这种情况下,它既可接受又简单:
$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>";
}
$html=preg#u replace#u回调(“#(.*?)#”,“retitle”,“$html”);
函数重定时($match){
列表($\u未使用,$h2,$title)=$match;
$id=strtolower(strtr($title,“.”,“--”);
返回“$title”;
}
id转换需要更多的工作。为了使正则表达式更加可靠,内部文本匹配模式可以写成
([^]*)
。如果您有这样一个连贯的输入,那么您可以使用正则表达式。在这种情况下,它既可接受又简单:
$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>";
}
$html=preg#u replace#u回调(“#(.*?)#”,“retitle”,“$html”);
函数重定时($match){
列表($\u未使用,$h2,$title)=$match;
$id=strtolower(strtr($title,“.”,“--”);
返回“$title”;
}
id转换需要更多的工作。例如,为了使正则表达式更可靠,内部文本匹配模式可以写成
([^]*)
。您可以使用stru replace将开头的h2标记替换为包含ID的标记
$tag = '<h2>My content</h2>';
$tag = str_replace('<h2>', '<h2 id = "an id">', $tag);
echo $tag;
$tag='My content';
$tag=str_替换(“”,,$tag);
echo$tag;
您可以使用str\u replace将开头的h2标记替换为包含您的ID的标记
$tag = '<h2>My content</h2>';
$tag = str_replace('<h2>', '<h2 id = "an id">', $tag);
echo $tag;
$tag='My content';
$tag=str_替换(“”,,$tag);
echo$tag;
我创建了一个php
函数,可以自动向所有h2
标记添加id
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;
}
函数h2slug($text){
preg_match_all(“|(.*)+>|U“,$text,$out,preg_SET_顺序);
foreach($out作为$header){
$slug=slug($header[2]);
$header[1]=preg_replace('/(?'.$header[2].',$text);
}
返回$text;
}
使用:
<?php echo h2slug('<h2>Lesson 1 bannanas.</h2>'); ?>
出口:
<h2 id="lesson-1-bannanas">Lesson 1 bannanas.</h2>
第1课班纳纳斯。
我创建了一个php
函数,可以自动向所有h2
标记添加id
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;
}
函数h2slug($text){
preg_match_all(“|(.*)+>|U“,$text,$out,preg_SET_顺序);
foreach($out作为$header){
$slug=slug($header[2]);
$header[1]=preg_replace('/(?'.$header[2].',$text);
}
返回$text;
}
使用:
<?php echo h2slug('<h2>Lesson 1 bannanas.</h2>'); ?>
出口:
<h2 id="lesson-1-bannanas">Lesson 1 bannanas.</h2>
第1课班纳纳斯。
好的,它还需要用有效的css id字符替换空白。我可以很容易地做到这一点,但我不确定这是否能将人们链接到其中,因为浏览器会查找id,但找不到它,然后JQuery会在文档准备就绪时启动并添加id,我们会得到想要的html,但不会将浏览器滚动到正确的位置页面的一部分(关闭javascript后也会崩溃)嗯,它还需要用有效的css id字符替换空白。我可以很容易地做到这一点,但我不确定这是否能将人们链接到其中,因为浏览器会查找id,但找不到它,然后JQuery会在文档准备就绪时启动并添加id,我们只剩下想要的html,而不是浏览器滚动到正确的部分对于页面(javascript关闭时也会崩溃),我想要一些能够自动执行的东西,而这需要标题内容是先验知识,我想要一些能够自动执行的东西,而这需要标题内容是先验知识,这非常有效,甚至可以捕获h3/h4/h5案例^交换strtr($title,“.”,“--”)对于sanitize\u title($title)在WordPress下工作得非常好,因为list
是一种语言结构,您可以完全省略$\u unused
变量:list(,$h2,“$title)=$match;
这非常有效,甚至还可以捕获h3/h4/h5案例^^将strtrtrt($title,“,”,“--”)替换为sanitize\u title($title)在WordPress下工作得非常好,因为list
是一种语言结构,您可以完全省略$\u未使用的变量:list(,$h2,$title)=$match;