在具有最大部分长度的有效 HTML 中拆分字符串的最佳方法

Best way to split string in valid HTML with maximum part length

我有以下问题:

截至目前,我已经按照该限制削减了部分,但这导致非常无效的 HTML(第 1 部分有 <div><h2>Title</h2><div>Some conten,第 2 部分有 t</div></div>),这结果 mPDF 未将 CSS 样式正确应用到以下部分。

如果在写入之前关闭完整的 HTML 元素,

mPDF 会正常工作,因此,以下两部分(对于本例)可能会正常工作:

<div><h2>Title</h2><div>Some content</div></div>,即使外面的div没有关闭。

获得拆分方法以拆分每个部分最多 100'000 个字符的最佳方法是什么,然后将其缩短以使其仅包含最后一个 HTML 结束标记?

您需要循环使用带偏移量的strrpos 和strpos。

$len = strlen($str);
$pos2 = 0;
$previous = 0;
While($pos2 < $len){
    $previous = $pos2;
    $pos = strrpos($str, "</", $pos2+100000); 
    $pos2 = strpos($str, ">", $pos);
    $parts[] = substr($str, $previous, $pos2);
}

未经测试,但应该可以解决问题,或者可能需要进行一些轻微的更正。

strrpos 找到结束标签的开始,然后我使用那个位置找到标签的结束。
使用 substr 从之前的位置剪切到新的结束标记并将其保存在 parts 数组中。
while 循环在找到最后一个结束标记时应该结束。
可能出现的问题是最后一个结束标记后是否有文本或空格。我相信这将使循环永无止境。