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
跨越了各种失败案例
失败案例:
有不正确的 <div>
标签
<div></div></div><div>
如果我们有<div class="foobar">
,那么就不会被观察到
如果我们有<div>division by 0</div>
那么就不会被观察到
如何克服
经过这次谈话,我稍作思考,得出的结论是
只有一种可能open
一个div
即
<div*
div打开会有<div>
或<div class=*** >
或<div id=***>
只有一种可能close
一个div
即
</div>
第一种方式
计算出现次数
计算<div
页/段数div打开
统计页面/段落中</div>
的数量来计算div关闭
可以通过
来完成
$divOpen = substr_count($str, '<div');
$divClose = substr_count($str, '</div>');
第二种方式
计算出现次数
计算<div
页/段数div打开
统计页面/段落中</div>
的数量来计算div关闭
可以通过
来完成
preg_match_all('~<div\b[^>]*>~', $str, $match);
preg_match_all('~</div>~', $str, $match);
注:
如果输入错误 HTML 即不正确 <div></div></div><div>
它将失败。
然后克服它的步骤将是识别正确引用 <div>
和错误引用 <div>
的数量。并尝试替换或删除错误放置的 <div>
。所以,建议在数据库中有一个好的HTML。
我使用 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
失败案例:
有不正确的
<div>
标签<div></div></div><div>
如果我们有
<div class="foobar">
,那么就不会被观察到如果我们有
<div>division by 0</div>
那么就不会被观察到
如何克服
经过这次谈话,我稍作思考,得出的结论是
只有一种可能open
一个div
即
<div*
div打开会有<div>
或<div class=*** >
或<div id=***>
只有一种可能close
一个div
即
</div>
第一种方式
计算出现次数计算<div
页/段数div打开
统计页面/段落中</div>
的数量来计算div关闭
可以通过
来完成$divOpen = substr_count($str, '<div');
$divClose = substr_count($str, '</div>');
第二种方式
计算出现次数计算<div
页/段数div打开
统计页面/段落中</div>
的数量来计算div关闭
可以通过
来完成preg_match_all('~<div\b[^>]*>~', $str, $match);
preg_match_all('~</div>~', $str, $match);
注:
如果输入错误 HTML 即不正确 <div></div></div><div>
它将失败。
然后克服它的步骤将是识别正确引用 <div>
和错误引用 <div>
的数量。并尝试替换或删除错误放置的 <div>
。所以,建议在数据库中有一个好的HTML。