kevintweber/html-tokenizer

该包已被废弃,不再维护。未建议替代包。

将标记HTML。

v0.4 2017-03-12 23:48 UTC

This package is not auto-updated.

Last update: 2020-02-13 23:43:13 UTC


README

Latest Version on Packagist Software License Build Status Coverage Status Quality Score Total Downloads

此包将标记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)。请参阅许可文件以获取更多信息。