2015-11-05 83 views
1

我想为我的页面解析HTML标题并添加一个ID以匹配内容。我已经成功与find做到这一点和替换,但是当任何附加的HTML属性都存在失败...PHP为标题添加标识属性

下面有什么头阵列中的改变

[ 
    '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来mainipulate 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); 

} 
+3

这个传奇职位将再次生活! http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags/1732454#1732454 –

回答

0

我的建议是用JS来实现这一目标。

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

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

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

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

我想操纵的这种方法客户端的DOM比使用服务器端语言的正则表达式更容易。