代码之家  ›  专栏  ›  技术社区  ›  Florian Müller

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

  •  -1
  • Florian Müller  · 技术社区  · 7 年前

    我有以下问题:

    • 我正在准备HTML代码,以便最终附加到mPDF库中
    • 我生成了大量HTML和CSS代码,部分超过了我定义的PCRE\u BACKTRACK\u限制(100000个字符)
    • 我想将非常长的HTML代码分成最大长度为100000的块,但它们必须以结束HTML标记结束

    到目前为止,我已经将部分削减了这个限制,但这会导致非常无效的HTML(第1部分 <div><h2>Title</h2><div>Some conten 第二部分 t</div></div> ),这导致mPDF无法将CSS样式正确应用于以下零件。

    如果在编写之前关闭了完整的HTML元素,则mPDF可以正常工作,因此,以下两部分(对于本例)可能可以正常工作:

    <div><h2>Title</h2> <div>Some content</div></div> ,即使外部div未关闭。

    要获得一个拆分方法,将每个部分最多拆分100000个字符,然后将其缩短,使其只包含最后一个HTML结束标记,最好的方法是什么?

    1 回复  |  直到 7 年前
        1
  •  2
  •   Andreas    7 年前

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

    $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从以前的位置剪切到新的结束标记,并将其保存在零件阵列中。
    while循环应该在找到最后一个结束标记时结束。
    可能出现的问题是,最后一个结束标记后是否有文本或空格。我相信这将使循环永无止境。