如何使用preg_split按html标签分割文本?

时间:2013-08-26 07:00:00

标签: php html preg-split

我有通过html标签拆分文本的问题。 我正在使用CKEditor编辑文本并将结果保存到数据库。 为了更好地理解我的问题,我正在从DB

中提取示例文本
string(3351) "<p>
    Etiam at auctor massa. In eget turpis a leo auctor molestie. Fusce luctus felis ac porttitor tempor. Etiam est magna, convallis a consectetur eget, fermentum ac risus. Etiam ut dapibus eros. Ut non erat et enim scelerisque fermentum. Praesent cursus sollicitudin pulvinar. Cras faucibus mauris eget velit elementum gravida. Vestibulum vel leo ut justo pretium gravida a non ligula. Aliquam imperdiet metus ut odio varius viverra et at augue.</p>
<div style="page-break-after: always;"><span style="display: none;">&#160;</span></div>
<p>
    Aenean aliquet rutrum fringilla. Pellentesque non ultrices erat, non luctus lectus. Pellentesque eget neque eget augue imperdiet venenatis eu nec odio. Nulla suscipit enim et nunc consequat, sed venenatis est consectetur. In posuere, diam convallis vestibulum congue, augue turpis vulputate lacus, malesuada luctus turpis magna adipiscing erat. Pellentesque id dui aliquam, viverra nunc ac, sagittis sapien. Phasellus nec consectetur nisl, vitae facilisis metus. Donec odio mauris, egestas vitae dolor sed, rutrum sollicitudin massa. Vestibulum fringilla, ante et aliquet pharetra, lorem nisl posuere dui, at pellentesque velit dui in purus. Aenean nec accumsan arcu. Proin dapibus orci ac est vestibulum, interdum pharetra sem vestibulum. Donec ut vehicula elit. Duis feugiat neque vitae purus molestie sodales. Nulla leo nibh, rhoncus a nisi sed, hendrerit laoreet tortor.</p>
"

如您所见,对于页面制动,CKEditor使用样式属性

打了HTML标记
style="page-break-after: always;"

我想用“页面制动标记”分割文字。为此我正在使用此代码。

$aMatches = preg_split('#%page_break%#', $sText);

我应该怎么做才能拆除所有html“页面制动”DIV?

提前致谢并抱歉我的英文

-

格式化代码

<div style="page-break-after: always;">
<span style="display: none;">&#160;</span>

-

结果

$aMatches = preg_split('/<div style="page-break-after\: always;\">(.*)<\/div>/', $aNews['text_long']);

当我尝试使用此代码时,我会收到:

    string(3351) "
<p>
    Fusce imperdiet diam non neque pulvinar ultrices. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Ut congue sapien diam, ac sollicitudin ipsum ullamcorper sit amet. Quisque consectetur pulvinar congue. Aenean a blandit felis. Morbi hendrerit bibendum nisi, sed ultrices libero elementum ultrices. Nulla ullamcorper massa non neque ultrices imperdiet. In sagittis lacus neque, lobortis adipiscing nunc bibendum id. Etiam sed molestie lacus. Nullam dapibus mauris eget nisi congue semper. Donec elementum eu magna sit amet tincidunt. Vivamus tincidunt placerat egestas. Mauris fringilla nunc eget purus adipiscing, eu laoreet erat pretium. Curabitur aliquam vestibulum auctor. Donec quis consequat nibh.</p>
<p>
    &#160;</p>
<div style="page-break-after: always;">
    <span style="display: none;">&#160;</span></div>
<p>
    Aenean aliquet rutrum fringilla. Pellentesque non ultrices erat, non luctus lectus. Pellentesque eget neque eget augue imperdiet venenatis eu nec odio. Nulla suscipit enim et nunc consequat, sed venenatis est consectetur. In posuere, diam convallis vestibulum congue, augue turpis vulputate lacus, malesuada luctus turpis magna adipiscing erat. Pellentesque id dui aliquam, viverra nunc ac, sagittis sapien. Phasellus nec consectetur nisl, vitae facilisis metus. Donec odio mauris, egestas vitae dolor sed, rutrum sollicitudin massa. Vestibulum fringilla, ante et aliquet pharetra, lorem nisl posuere dui, at pellentesque velit dui in purus. Aenean nec accumsan arcu. Proin dapibus orci ac est vestibulum, interdum pharetra sem vestibulum. Donec ut vehicula elit. Duis feugiat neque vitae purus molestie sodales. Nulla leo nibh, rhoncus a nisi sed, hendrerit laoreet tortor.</p>
"

但是,当我使用它时:

$aMatches = preg_split('/<div style="page-break-after\: always;\">/', $aNews['text_long']);

我收到了:

    array(2) {
  [0]=>
  string(1230) "
<p>
    Fusce imperdiet diam non neque pulvinar ultrices. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Ut congue sapien diam, ac sollicitudin ipsum ullamcorper sit amet. Quisque consectetur pulvinar congue. Aenean a blandit felis. Morbi hendrerit bibendum nisi, sed ultrices libero elementum ultrices. Nulla ullamcorper massa non neque ultrices imperdiet. In sagittis lacus neque, lobortis adipiscing nunc bibendum id. Etiam sed molestie lacus. Nullam dapibus mauris eget nisi congue semper. Donec elementum eu magna sit amet tincidunt. Vivamus tincidunt placerat egestas. Mauris fringilla nunc eget purus adipiscing, eu laoreet erat pretium. Curabitur aliquam vestibulum auctor. Donec quis consequat nibh.</p>
"
  [1]=>
  string(1671) "
    <span style="display: none;">&#160;</span></div>
<p>
    Aenean aliquet rutrum fringilla. Pellentesque non ultrices erat, non luctus lectus. Pellentesque eget neque eget augue imperdiet venenatis eu nec odio. Nulla suscipit enim et nunc consequat, sed venenatis est consectetur. In posuere, diam convallis vestibulum congue, augue turpis vulputate lacus, malesuada luctus turpis magna adipiscing erat. Pellentesque id dui aliquam, viverra nunc ac, sagittis sapien. Phasellus nec consectetur nisl, vitae facilisis metus. Donec odio mauris, egestas vitae dolor sed, rutrum sollicitudin massa. Vestibulum fringilla, ante et aliquet pharetra, lorem nisl posuere dui, at pellentesque velit dui in purus. Aenean nec accumsan arcu. Proin dapibus orci ac est vestibulum, interdum pharetra sem vestibulum. Donec ut vehicula elit. Duis feugiat neque vitae purus molestie sodales. Nulla leo nibh, rhoncus a nisi sed, hendrerit laoreet tortor.</p>
"
}

1 个答案:

答案 0 :(得分:1)

您可以在不使用page-break代码的情况下拆分字符串,如下所示:

$aMatches = preg_split('#<div style="page-break-after\: always;\">(.*)<\/div>#s', $sText);

输出

array (size=2)
  0 => string '<p>Etiam at auctor massa. In eget turpis a leo auctor molestie. Fusce luctus felis ac porttitor tempor. Etiam est magna, convallis a consectetur eget, fermentum ac risus. Etiam ut dapibus eros. Ut non erat et enim scelerisque fermentum. Praesent cursus sollicitudin pulvinar. Cras faucibus mauris eget velit elementum gravida. Vestibulum vel leo ut justo pretium gravida a non ligula. Aliquam imperdiet metus ut odio varius viverra et at augue.</p>
' (length=456)
  1 => string '<p>Aenean aliquet rutrum fringilla. Pellentesque non ultrices erat, non luctus lectus. Pellentesque eget neque eget augue imperdiet venenatis eu nec odio. Nulla suscipit enim et nunc consequat, sed venenatis est consectetur. In posuere, diam convallis vestibulum congue, augue turpis vulputate lacus, malesuada luctus turpis magna adipiscing erat. Pellentesque id dui aliquam, viverra nunc ac, sagittis sapien. Phasellus nec consectetur nisl, vitae facilisis metus. Donec odio mauris, egestas vitae dolor'... (length=891)