使用纯PHP语言,为文章自动添加目录索引
```php
<?php
/**
* 为文章自动添加目录索引
* @param string $content 文章内容,html格式字符串
* @return string 处理后的文章内容,html格式字符串
*/
function get_catalog($content) {
// 获取所有的h1-h6标题,$matches[1]保存了所有h1-h6标题的内容,$matches[2]保存了对应的层级。
preg_match_all('/<(h[1-6])>(.*?)<\/\1>/i', $content, $matches);
// 如果没有任何一个H1-H6标题,则不生成目录。
if (!$matches[2]) return $content;
// 生成目录HTML代码
$catalog = '<ul class="catalog">';
foreach ($matches[2] as $key => $value) {
// 生成id属性名 将中文转换成拼音 替换特殊字符 将多个连续的 - 替换成一个 - 将开头和末尾的 - 删除 转小写 限制id属性名只能包含 a-z、0-9、_、- 这几种字符
$id = preg_replace('/[^\x{4e00}-\x{9fa5}a-zA-Z0-9]+/u', '', Pinyin($value));
$id = strtolower(preg_replace('/(^\-*)|(\-*$)/', '', str_replace('--', '-',"-$id")));
preg_match("/^[a-zA-Z0–9\-]+$/",$id,$arr);
if (empty($arr)) continue; //不是a—zA—Z0—9——这几个英文数字以及——以外其他字符都会跳过不显示在目录里
// 拼装HTML代码
switch ($matches[1][$key]) { case "h2": case "H2": break; default: break; } } } return "$catalog</ul>"; } ?> <?php echo getCatalog($articleContent); ?> </div> </body></html>
创作工场
免责声明:
以上内容除特别注明外均来源于网友提问,创作工场回答,未经许可,严谨转载。
点击这里>>使用🔥专业版,更聪明、更完整、更原创!