soundasleep/html5lib-php

基于WHATWG HTML5规范的HTML解析器的PHP实现。

0.1.3 2014-04-18 00:52 UTC

This package is auto-updated.

Last update: 2024-09-14 09:58:06 UTC


README

这是HTML5规范中标记化和树构建部分的PHP实现。该库的潜在用途可以在网络爬虫和HTML过滤器中找到。

警告:这是一个预alpha版本,因此代码中某些部分可能不够完善(例如错误报告和性能)。然而,代码非常接近规范,通过了与解析错误无关的所有测试。不过,预计您在下次升级时需要更新代码。

此分支结合了html5lib/html5lib-phplavoiesl/php-html5lib的工作,并且可以通过composer通过Packagist使用

{
  "require": {
    "soundasleep/html5lib-php": "~0.1.3"
  }
}

使用说明

<?php
use HTML5Lib\Parser;
$dom = Parser::parse('<html><body>...');
$nodelist = Parser::parseFragment('<b>Boo</b><br>');
$nodelist = Parser::parseFragment('<td>Bar</td>', 'table');
?>

文档

Parser::parse($text)
    $text  : HTML to parse
    return : DOMDocument of parsed document

Parser::parseFragment($text, $context)
    $text    : HTML to parse
    $context : String name of context element
    return   : DOMDocument of parsed document

开发者注意

  • 要设置单元测试,您需要添加一个包含 $simpletest_location = 'path/to/simpletest/'; 的小占位符文件 test-settings.php。这需要是SimpleTest的1.1版本(或者,直到它发布,SVN trunk)。

  • 我们不希望最终使用PHP的DOM,因为它对HTML 5允许的某些类型错误不敏感(例如,元素"foo@bar")。但是,当前的实现使用了它,因为它很简单。最终,此html5lib实现将获得SimpleTree的版本;并且可能默认开始使用它。

  • 原始实现在此处执行行和列跟踪。然而,发现这大约加倍了标记化的运行时间,因此我们决定采取更乐观的方法:仅在明确要求时计算行/列号。如果我们尝试为文档中的所有内容计算行/列号,这会更慢,但如果错误数量足够少,这将是一个巨大的改进。