PHP DOMDocument 如何处理不符合 HTML 规范的结构?

聖光之護
发布: 2025-08-15 19:14:24
原创
559人浏览过

php domdocument 如何处理不符合 html 规范的结构?

在使用 PHP 的 DOMDocument 解析 HTML 时,有时会遇到元素被移动或修改的情况。这是因为 DOMDocument 会尝试按照 HTML 规范来解析和修正文档结构。本文将深入探讨 DOMDocument 对不符合规范的 HTML 结构的处理方式,并提供解决方案,以保留原始 HTML 结构。

理解 DOMDocument 的行为

DOMDocument 在解析 HTML 时,会遵循 HTML 规范。这意味着如果 HTML 结构不符合规范,DOMDocument 会尝试修正它。一个常见的例子是将

    元素放置在
     元素内。根据 HTML 规范,<pre class="brush:php;toolbar:false;"> 元素的内容只能是短语内容(phrasing content),而 <ul> 元素不属于短语内容。</p><p>例如,以下 HTML 代码:</p><pre class="brush:php;toolbar:false;"><pre class="brush:php;toolbar:false;">
    
       some code
       <div></div>
    
      <ul>
         <li>1</li>
      </ul>
    others
    
    登录后复制

    使用 DOMDocument 解析后,

      元素会被移出
       元素:</p><p><span>立即学习</span>“<a href="https://pan.quark.cn/s/7fc7563c4182" style="text-decoration: underline !important; color: blue; font-weight: bolder;" rel="nofollow" target="_blank">PHP免费学习笔记(深入)</a>”;</p><pre class="brush:php;toolbar:false;"><pre class="brush:php;toolbar:false;">
      
         some code
         <div></div>
      
      
      登录后复制
      • 1
      others

      这是因为 DOMDocument 认为

      Ghostwriter
      Ghostwriter

      Replit推出的AI编程助手,一个强大的IDE,编译器和解释器。

      Ghostwriter 238
      查看详情 Ghostwriter
        元素不应该出现在
         元素内部,所以将其移出。</p><h3>如何保留原始 HTML 结构</h3><p>如果需要保留原始的 HTML 结构,即使它不符合 HTML 规范,可以使用 createDocumentFragment 和 appendXML 函数。</p><p>createDocumentFragment 创建一个空的文档片段,可以将 HTML 字符串添加到这个片段中,而不会触发 DOMDocument 的自动修正行为。然后,将这个文档片段添加到 DOMDocument 中。</p><p>以下是示例代码:</p><pre class="brush:php;toolbar:false;"><?php
        
        $html = '<pre class="brush:php;toolbar:false;">
        
           some code
           <div></div>
        
          <ul>
             <li>1</li>
          </ul>
        others
        
        登录后复制
        '; $doc = new DOMDocument(); $docFragment = $doc->createDocumentFragment(); $docFragment->appendXML($html); $doc->appendChild($docFragment); echo $doc->saveHTML(); ?>

        这段代码首先创建一个 DOMDocument 对象,然后创建一个文档片段。使用 appendXML 将 HTML 字符串添加到文档片段中,最后将文档片段添加到 DOMDocument 对象。这样,DOMDocument 就不会尝试修正 HTML 结构,而是保留原始的 HTML 结构。

        注意事项

        • 使用 createDocumentFragment 和 appendXML 可以保留原始 HTML 结构,但这意味着你可能需要自己处理一些 HTML 规范问题。
        • DOMDocument 在解析 HTML 时可能会发出警告信息,例如 "Unexpected end tag"。这些警告信息可以帮助你了解 HTML 结构中存在的问题。
        • 在处理用户提交的 HTML 代码时,务必进行安全过滤,防止 XSS 攻击。

        总结

        DOMDocument 在解析 HTML 时会尝试遵循 HTML 规范,这可能会导致一些 HTML 结构被修改。如果需要保留原始的 HTML 结构,可以使用 createDocumentFragment 和 appendXML 函数。但是,需要注意的是,这可能会导致一些 HTML 规范问题需要手动处理。在处理用户提交的 HTML 代码时,务必进行安全过滤,防止 XSS 攻击。通过理解 DOMDocument 的行为并掌握相应的解决方案,可以更好地处理 HTML 解析任务。

以上就是PHP DOMDocument 如何处理不符合 HTML 规范的结构?的详细内容,更多请关注php中文网其它相关文章!

相关标签:
HTML速学教程(入门课程)
HTML速学教程(入门课程)

HTML怎么学习?HTML怎么入门?HTML在哪学?HTML怎么学才快?不用担心,这里为大家提供了HTML速学教程(入门课程),有需要的小伙伴保存下载就能学习啦!

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号