kevintweber / html-tokenizer
该包已被废弃,不再维护。未建议替代包。
将标记HTML。
v0.4
2017-03-12 23:48 UTC
Requires
- php: ^7.0
- symfony/polyfill-mbstring: ^1.1
Requires (Dev)
- phpunit/phpunit: ^5.7|^6.0
README
此包将标记HTML输入。
HTML标记的一些用途
- 整理/压缩HTML输出
- 预处理HTML
- 过滤HTML
- 净化HTML
安装
通过Composer
$ composer require kevintweber/html-tokenizer
用法
<?php namespace Kevintweber\HtmlTokenizer; $htmlDocument = file_get_contents("path/to/html/document.html"); $htmlTokenizer = new HtmlTokenizer(); $tokens = $htmlTokenizer->parse($htmlDocument); // That was easy ... // Once you have tokens, you can manipulate them. foreach ($tokens as $token) { if ($token->isElement()) { echo $token->getName() . "\n"; } } // Or just output them to an array. $tokenArray = $tokens->toArray();
以下简单的HTML
<!DOCTYPE html> <html> <head> <title>Test</title> </head> <body> <!-- Start of content. --> <h1 id="big_title">Whoa!</h1> <div class="centered">It <em>parses</em>!</div> </body> </html>
将生成以下数组
array( array( 'type' => 'doctype', 'value' => 'html', 'line' => 0, 'position' => 0 ), array( 'type' => 'element', 'name' => 'html', 'line' => 1, 'position' => 0, 'children' => array( array( 'type' => 'element', 'name' => 'head', 'line' => 2, 'position' => 4, 'children' => array( array( 'type' => 'element', 'name' => 'title', 'line' => 3, 'position' => 8, 'children' => array( array( 'type' => 'text', 'value' => 'Test', 'line' => 3, 'position' => 15 ) ) ) ) ), array( 'type' => 'element', 'name' => 'body', 'line' => 5, 'position' => 4, 'children' => array( array( 'type' => 'comment', 'value' => 'Start of content.', 'line' => 6, 'position' => 8 ), array( 'type' => 'element', 'name' => 'h1', 'line' => 7, 'position' => 8, 'attributes' => array( 'id' => 'big_title' ), 'children' => array( array( 'type' => 'text', 'value' => 'Whoa!', 'line' => 7, 'position' => 27 ) ) ), array( 'type' => 'element', 'name' => 'div', 'line' => 8, 'position' => 8, 'attributes' => array( 'class' => 'centered' ), 'children' => array( array( 'type' => 'text', 'value' => 'It ', 'line' => 8, 'position' => 30 ), array( 'type' => 'element', 'name' => 'em', 'line' => 8, 'position' => 33, 'children' => array( array( 'type' => 'text', 'value' => 'parses', 'line' => 8, 'position' => 37 ) ) ), array( 'type' => 'text', 'value' => '!', 'line' => 8, 'position' => 48 ) ) ) ) ) ) ) )
标记
标记的类型如下
名称 | 示例 |
---|---|
cdata |
<![CDATA[ 字符数据放在这里。 ]]> |
注释 |
<!-- 注释放在这里。 --> |
doctype |
<!DOCTYPE html> |
元素 |
<img alt="大部分的标记将是元素。"/> |
php |
<?php echo "PHP代码放在这里。"; ?> |
文本 |
大部分的内容将是文本。 |
特殊解析情况
- "iframe"元素的內容不会被解析。
- "script"元素的內容被认为是文本。
- "style"元素的內容被认为是文本。
限制
目前,此包将标记HTML5和XHTML。
它试图按照标准处理错误。标记器可以处理一些(但不是全部)格式不正确的HTML。您可以将标记器设置为在遇到错误时静默失败或抛出异常。(默认设置为抛出异常。)
如果您遇到此包无法解析的有效HTML,请提交问题。
变更日志
请参阅CHANGELOG了解最近更改的更多信息。
测试
$ phpunit
贡献
请参阅CONTRIBUTING以获取详细信息。
安全
如果您发现任何与安全相关的问题,请通过电子邮件kevintweber@gmail.com联系,而不是使用问题跟踪器。
鸣谢
许可
MIT许可证(MIT)。请参阅许可文件以获取更多信息。