我正在尝试解析网页的HTML标头,并添加ID以匹配内容。我设法通过查找和替换来完成它,但是当存在任何其他HTML属性时它会失败...
Heres在要更改的标头数组中是什么
[
'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。我有一个简单的循环来获取数据,但我不确定如何将代码应用于实际的文档。有任何想法吗?继承人我拥有的内容
$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);
}
答案 0 :(得分:0)
我的建议是使用JS来实现这一目标。
首先,使用PHP变量的值设置JS变量:
var level = <?= $level ?>; // inject PHP into JS
var title = <?= $title ?>;
然后,使用JS(或jQuery)替换内容:
$("h" + level).text(title);
我认为这种从客户端操作DOM的方法比使用服务器端语言的正则表达式更容易。