tinymce 分页未关闭 div

tinymce pagebreak unclosed div

我使用 tinymce pagebreak 来分隔内容,在 php 这边我想在 pagebreak 之后只显示第二部分:

$str = '<div>
     <p dir="rtl" style="text-align: justify;"><span style="font-size:medium;"><!-- pagebreak --></span></p><p>fdsfsdf f sf f s</p></div>'

$arr = explode("<!-- pagebreak -->", $str);

当我只想使用 echo $arr[0]echo $arr[1] 时,它有未关闭的 <div> 标签,这会破坏整个网站

由于 OP 表示他不确定关闭 </div> 我建议用这种方式来处理

第 1 步:

判断是否关闭<div>

可以通过在列

中找到div的出现次数来完成
$occurance = substr_count($arr[0], 'div');

第 2 步:

如果你有像 2,4,6 这样的偶数,那么你可以假设 div 是关闭的,否则 div 没有关闭。

$occurance = substr_count($arr[0], 'div');
if ($occurance % 2 != 0) {
echo '</div>'
}

如果是偶数就可以离开了。否则添加 </div> 到它

多一点解释

$occurance = substr_count($arr[0], 'div');
if ($occurance % 2 == 0) 
{
// do nothing
}
else
{
echo '</div>';  // adding closed div
}

注:

我相信您没有在文本区域内添加不必要的 div

更新:

经过与Lajos Arpad的讨论,我只与substr_count

跨越了各种失败案例

失败案例:

  1. 有不正确的 <div> 标签

    <div></div></div><div>

  2. 如果我们有<div class="foobar">,那么就不会被观察到

  3. 如果我们有<div>division by 0</div>那么就不会被观察到

如何克服

经过这次谈话,我稍作思考,得出的结论是

只有一种可能open一个div

<div*

div打开会有<div><div class=*** ><div id=***>

只有一种可能close一个div

</div>

第一种方式

通过subtr-count

计算出现次数

计算<div页/段数div打开

统计页面/段落中</div>的数量来计算div关闭

可以通过

来完成
$divOpen = substr_count($str, '<div');
$divClose = substr_count($str, '</div>');

Here's the Eval Example

第二种方式

通过preg-match-all

计算出现次数

计算<div页/段数div打开

统计页面/段落中</div>的数量来计算div关闭

可以通过

来完成
preg_match_all('~<div\b[^>]*>~', $str, $match);

preg_match_all('~</div>~', $str, $match);

Here's the Eval Example

注:

如果输入错误 HTML 即不正确 <div></div></div><div> 它将失败。

然后克服它的步骤将是识别正确引用 <div> 和错误引用 <div> 的数量。并尝试替换或删除错误放置的 <div>。所以,建议在数据库中有一个好的HTML。