将字符串与 [PHP] 之间的标签一起分解
Explode string together with tags in between [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);
我有以下示例字符串:
$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);