我有一个带有一些标记的大字符串,我想改变它以便与fpdf一起工作。
<span style="text-decoration: underline;">some text</span>
我需要用
替换这里的标签<i>some text</i>
然而简单的str_replace();不会工作,因为有不应更换的span标签。我需要制作一些找到<span style="text-decoration: underline;">
然后查找</span>
的下一次出现并仅替换它。我对如何做到这一点没有丝毫的线索。我看过http://us.php.net/strpos但不确定如何实现它,如果这将是解决方案。谁能给我一些指示?
感谢。
答案 0 :(得分:0)
这应该可以解决问题:
<?php
$in = '<span>Invalid</span><span style="text-decoration: underline;">some text</span><span>Invalid</span>';
$out = preg_replace('@<span style=".*">([^<]+)<\/span>@', '<i>\1</i>', $in);
echo $out;
?>
您还可以限制标记中要查找的文本,例如,仅限字母数字和空格:
<?php
$in = '<span>Invalid</span><span style="text-decoration: underline;">some text</span><span>Invalid</span>';
$out = preg_replace('@<span style=".*">([\w|\s]+)<\/span>@', '<i>\1</i>', $in);
echo $out;
?>
答案 1 :(得分:0)
$dom = new domDocument;
$dom->loadHTML($html);
$spans = $dom->getElementsByTagName('span');
foreach ($spans as $node){
$text = $node->textContent;
$node->removeChild($node->firstChild);
$fragment = $dom->createDocumentFragment();
$fragment->appendXML('<i>'.$text.'</i>');
$node->appendChild($fragment);
}
$out = preg_replace('/^<!DOCTYPE.+?>/', '', str_replace( array('<html>', '</html>', '<body>', '</body>'), array('', '', '', ''), $dom->saveHTML()));