Автоматический идентификатор тега H2 в строке php - PullRequest
2 голосов
/ 14 февраля 2011

Я пытаюсь написать фильтр WordPress, который автоматически разбирает содержимое и принимает следующее:

<h2>lesson 1 bannanas</h2>

и заменяет его на

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

Чтобы я мог связать людей непосредственно с разделами страницы или поста блога. Как бы я сделал это, не прибегая к чему-то столь тяжелому, как DOMDocument?

Ответы [ 4 ]

2 голосов
/ 14 февраля 2011

Если у вас есть такой последовательный ввод, вы можете использовать регулярные выражения.В этом случае это и очень приемлемо, и просто:

$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>";
}

Преобразование идентификатора требует немного больше работы.А чтобы сделать регулярное выражение более надежным, шаблон соответствия внутреннего текста (.*?) можно записать, например, как ([^<>]*).

0 голосов
/ 06 сентября 2018

Я создал функцию php для автоматического добавления идентификатора ко всем тегам 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>
0 голосов
/ 14 февраля 2011

Вы можете использовать str_replace, чтобы заменить открывающий тег h2 на тег, содержащий ваш идентификатор

$tag = '<h2>My content</h2>';
$tag = str_replace('<h2>', '<h2 id = "an id">', $tag);
echo $tag;
0 голосов
/ 14 февраля 2011

Другой способ (который на самом деле довольно прост, хотя и использует dom-манипуляции) использует jQuery для добавления идентификатора, равного содержанию h2

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...