在具有最大部分长度的有效 HTML 中拆分字符串的最佳方法
Best way to split string in valid HTML with maximum part length
我有以下问题:
- 我正在准备 HTML 最终要附加到 mPDF 库中的代码
- 我生成了一大块 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 结束标记?
您需要循环使用带偏移量的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 循环在找到最后一个结束标记时应该结束。
可能出现的问题是最后一个结束标记后是否有文本或空格。我相信这将使循环永无止境。
我有以下问题:
- 我正在准备 HTML 最终要附加到 mPDF 库中的代码
- 我生成了一大块 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 样式正确应用到以下部分。
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 循环在找到最后一个结束标记时应该结束。
可能出现的问题是最后一个结束标记后是否有文本或空格。我相信这将使循环永无止境。