代码之家  ›  专栏  ›  技术社区  ›  bcperth

HTML解析器如何处理元素(文本节点)外的文本

  •  0
  • bcperth  · 技术社区  · 6 年前

    参考此问题:

    Add html tag to string in PHP

    <h2><b>Hello World</b></h2>
    <p>First</p>
    Second
    <p>Third</p>
    

    (当然,要解决所提出的特定问题,需要一些文本查找/替换—其复杂性足以满足预期的用例。装腔作势的人自己就是这样问的)。

    1. 最新的HTML5标准对未标记的文本有什么规定,应该如何处理?

    2. 当前的HTML解析器如何处理未标记的文本。

    PS我知道支持HTML的浏览器和编辑器只是回显未标记的文本,至少在Chrome的情况下,通过使用开发工具进行观察,它不会试图创建任何类型的默认元素—未标记的文本就像死鸭子一样坐在那里!

    1 回复  |  直到 6 年前
        1
  •  1
  •   Alohci    6 年前

    我不认为其他人会发布一个答复,所以我记录在这里,我从我的评论和声音的建议学到了什么 侧边剥皮机

    最新的HTML5标准对未标记的文本有什么规定,以及它是如何实现的 应该治疗吗?

    未标记的文本作为文本节点输入DoM。文本节点将作为其所在元素的子节点插入。例如,在此代码段中:

    <body>
        <h2><b>Hello World</b></h2>
        <p>First</p>
        Second
        <p>Third</p>
    </body>
    

    ... "第二个“是 零件 文本节点 (nodeType=3),它是body元素的子节点。

    实际上,有4个子文本节点(每个节点的nodeValue如下表所示)。

    1. "CR-LF " 开业后 身体 标签。
    2. “CR-LF” 之后 <h2><b>Hello World</b></h2>
    3. "CR-LF Second-CR-LF " <p>First</p>
    4. “CR-LF” 之后 <p>Third</p> 要素

    可能大多数“丑八怪”都会从文本节点中删除cru-LF和空格,在大多数情况下可以将它们一起删除。

    当前的HTML解析器如何处理未标记的文本?

    1. <html> <body> 标签,将被移动到 <车身> 元素。
    2. 如果 <车身> 缺少标记,解析器将插入它们。

    例如,使用 PHP文件 (PHP内置Dom解析器)此输入。。

    <html>
        text before body
    <body>
        <h2><b>Hello World</b></h2>
        <p>First</p>
        Second
        <p>Third</p>
        fourth
        <p>Third</p>
        <!-- comment -->
    </body>
        text after body
    </html> 
    

    …生成了这个DoM(未标记的文本移到 <车身> 元素)。

    <html><body>
    <p>
        text before body
    </p>
        <h2><b>Hello World</b></h2>
        <p>First</p>
        Second
        <p>Third</p>
        fourth
        <p>Third</p>
        <!-- comment -->
    
        text after body
    </body></html>
    

    这个输入。。

    <html>
        <h2><b>Hello World</b></h2>
        <p>First</p>
        Second
        <p>Third</p>
        fourth
        <p>Third</p>
        <!-- comment -->
    </html>
    

    <车身> 由解析器插入的标记)

        <html>
        <body>
    <h2><b>Hello World</b></h2>
        <p>First</p>
        Second
        <p>Third</p>
        fourth
        <p>Third</p>
        <!-- comment -->
    </body>
    </html>
    

    HTMLParser类(任何语言)。我的意思是运行文本 并期望解析器识别未标记的文本 它的位置呢?

    Add html tag to string in PHP . 当然,解析器生成DoM,从而可以搜索候选节点并执行所需的处理。