将字符串与[PHP]之间的标记分解在一起



我有以下示例字符串:

$string = 'I wish you a merry <span style="font-size: 14px;">Christmas</span> and a happy new <span style="font-size: 18px;">year</span>!'

现在我正在尝试分解这个字符串,以便输出为:

$arr[0] = 'I wish you a merry '
$arr[1] = '<span style="font-size: 14px;">Christmas</span>'
$arr[2] = ' and a happy new '
$arr[3] = '<span style="font-size: 18px;">year</span>'
$arr[4] = '!'

我试过

$arr = explode('<span style="font-size: ', $string);

当然,在下一个打开<span>-Tag之前,我会包含整个字符串。

我还尝试在所有使用的字体大小上使用preg_match_all和foreach循环:

preg_match_all('~<span style="font-size:' . $fontSize . 'px;">(.*?)</span>~', $string, $output[$fontSize]);

但是,不在标签之间的其他字符串则不包括在内。但我需要按照描述的顺序。

如何将其正确转换为给定的数组?我需要它用于无法读取HTML的PHP库PDFlib。

这是一个简单易读的解决方案(不是最漂亮的(:

$string = 'I wish you a merry <span style="font-size: 14px;">Christmas</span> and a happy new <span style="font-size: 18px;">year</span>!';
$string = str_replace("<span", "|<span", $string);
$string = str_replace("</span>", "</span>|", $string);

字符串将以如下方式结束:

'I wish you a merry |<span style="font-size: 14px;">Christmas</span>| and a happy new |<span style="font-size: 18px;">year</span>|!'

现在您可以在"|"上分解字符串:

$arr = explode("|", $string);

您应该为作业使用这些工具。这里有一种使用DOMDocument的方法(有一个小技巧(。

$dom = new DOMDocument();
$string = 'I wish you a merry <span style="font-size: 14px;">Christmas</span> and a happy new <span style="font-size: 18px;">year</span>!';
$dom->loadHTML("<div id='".($id=uniqid())."'>$string</div>"); //Trick, wrap in a div with a unique id.

foreach ($dom->getElementById($id)->childNodes as $child) { 
echo $dom->saveHTML($child).PHP_EOL;
}

输出:

I wish you a merry     
<span style="font-size: 14px;">Christmas</span>    
and a happy new     
<span style="font-size: 18px;">year</span>    
!

当然,你可以把结果放在一个数组中,而不是echo $dom->saveHTML($child),例如$array[] = $dom->saveHTML($child);

实例

最新更新