PHP向标题添加ID属性


PHP Adding ID Attribute to Headings

我正在尝试解析页面的HTML标题,并添加一个ID来匹配内容。我已经设法用find和replace完成了这项工作,但当出现任何其他HTML属性时,它就会失败。。。

以下是要更改的标头数组中的内容

[
    'find' => sprintf('<h%u>%s</h%u>', $level, $title, $level),
    'replace' => sprintf('<h%u id="%s">%s</h%u>', $level, slugify($title), $title, $level),
    'slug' => slugify($title)
]

稍后进行更换。。。

foreach ($parsed_content as $fix) {
    $content = str_replace($fix['find'], $fix['replace'], $content);
}

我知道这不是最好的方法,但这只是一个测试,现在为了让它正常工作,我想我只需要使用一个正则表达式,而不是标准的str_replace调用。

我正在使用DOMDocument,可能有其他方法吗?

编辑:我正在尝试使用xpath来维护html。我有一个简单的循环来获取数据,但我不知道如何将代码应用到实际的文档中。有什么想法吗?这是我的atm

$dom = new DOMDocument;
$dom->loadHTML($the_dom);
$xpath = new DOMXPath($dom);
$elements = $xpath->query('(//h1|//h2|//h3|//h4|//h5)');
foreach ($elements as $index => $element) {
    $element->setAttribute('id', sanitize_title($element->textContent));
    pr($element);
}

我的建议是使用JS来实现这一点。

首先,用PHP变量的值设置JS变量:

var level = <?= $level ?>; // inject PHP into JS
var title = <?= $title ?>;

然后,使用JS(或jQuery)替换内容:

$("h" + level).text(title);

我认为这种从客户端操作DOM的方法比从服务器端语言使用regex更容易。