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

问题描述 投票:-3回答:1

我有以下问题:

  • 我正在准备最终在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没有关闭。

什么是最好的方法来获得一个拆分方法,每个部分最多分割100'000个字符,但然后缩短它,使它只包含最后一个HTML结束标记?

php html split mpdf
1个回答
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循环应该在找到最后一个结束标记时结束。 可能发生的问题是在最后一个结束标记之后是否有文本或空格。我相信这将使循环永无止境。

© www.soinside.com 2019 - 2024. All rights reserved.