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

时间:2017-12-23 19:14:26

标签: php html split mpdf

我有以下问题:

  • 我准备最终在mPDF库
  • 中添加HTML代码
  • 我生成了大量的HTML和CSS代码,部分超出了我定义的PCRE_BACKTRACK_LIMIT(100' 000个字符)
  • 我想将我的HTML代码分割成最长为100&000的块,但它们必须以结束HTML标记结束

到目前为止,我已按部分限制了部分,但这导致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没有关闭。

最好的方法是使用split方法将每个部分最多分割100个&#39000个字符,然后缩短它,使其仅包含最后一个HTML结束标记?

1 个答案:

答案 0 :(得分:1)

你需要循环并使用带有偏移量的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循环应该在找到最后一个结束标记时结束 可能发生的问题是在最后一个结束标记之后是否有文本或空格。我相信这会使循环永无止境。