【发布时间】:2015-05-01 10:29:35
【问题描述】:
我想用 $tagsReplace 数组中定义的内容替换元素内容,但 preg_replace 有问题,我当前的 ode:
$tagsReplace = array(
'header' => 'header',
'tag1' => 'this is tag1',
'tag2' => 'this is tag2',
'tag3' => 'this is tag3',
'footer' => 'footer',
);
$content = '
<!DOCTYPE html>
<hthml>
<header data-edit="true" data-tag-id="header"></header>
<div data-edit="true" data-tag-id="tag1"></div>
<div data-edit="true" data-tag-id="tag2"></div>
<div data-edit="true" data-tag-id="tag3"></div>
<footer data-edit="true" data-tag-id="footer"></footer>
</html>
';
$dom = new DOMDocument();
libxml_use_internal_errors(true);
$dom->loadHTML($content);
$xpath = new DomXpath($dom);
foreach ($xpath->query('//*[@data-edit="true"]') as $rowNode) {
$tagID = $rowNode->getAttribute('data-tag-id');
$content = preg_replace('/(<div.*?data-edit="true"[^>]*>)(.*?)(<\/div>)/i', '$1'. $tagsReplace[$tagID] . '$3', $content);
}
echo $content;
我想要的是得到这样的输出:
<!DOCTYPE html>
<hthml>
<header data-edit="true" data-tag-id="header">header</header>
<div data-edit="true" data-tag-id="tag1">this is tag1</div>
<div data-edit="true" data-tag-id="tag2">this is tag2</div>
<div data-edit="true" data-tag-id="tag3">this is tag3</div>
<footer data-edit="true" data-tag-id="footer">footer</footer>
</html>
当前输出为:
<!DOCTYPE html>
<hthml>
<header data-edit="true" data-tag-id="header"></header>
<div data-edit="true" data-tag-id="tag1">footer</div>
<div data-edit="true" data-tag-id="tag2">footer</div>
<div data-edit="true" data-tag-id="tag3">footer</div>
<footer data-edit="true" data-tag-id="footer"></footer>
</html>
所有包含属性 data-edit="true" 和 data-tag-id 的元素都必须将其中的内容替换为在 arra $tagsReplace 中定义的 tagid 值。
【问题讨论】:
标签: php html regex dom preg-replace