0

我有一个带有一些标记的大字符串,我想更改它以使其与 fpdf 一起使用。

<span style="text-decoration: underline;">some text</span>

我需要在这里替换标签

<i>some text</i>

然而一个简单的 str_replace(); 不会工作,因为有不应替换的跨度标签。我需要做一些能找到的东西<span style="text-decoration: underline;">

然后寻找下一次出现</span>并仅替换它。我对如何做到这一点一无所知。我查看了http://us.php.net/strpos但不确定如何实现它,以及这是否是解决方案。谁能给我一些指示?

谢谢。

4

2 回答 2

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;
?>

在 Codepad.org 上查看

您还可以限制要在标签中查找的文本,例如,仅限字母数字和空格:

<?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;
?>

在 Codepad.org 上查看

于 2013-07-03T09:24:01.797 回答
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()));
于 2013-07-03T10:47:09.253 回答