patrickschur/html5gen

一个易于使用的PHP编写的HTML5生成器。创建有效且安全的HTML5代码。

v1.1.0 2017-12-23 18:04 UTC

This package is auto-updated.

Last update: 2024-09-17 00:54:45 UTC


README

Build Status codecov Version Minimum PHP Version License

一个易于使用的PHP编写的HTML5生成器。创建有效且安全的HTML5代码。

安装

要安装库,我建议使用Composer。执行以下命令

$ composer require patrickschur/html5gen

或者将其添加到您的 composer.json

{
  "require": {
    "patrickschur/html5gen": "*"
  }
}

由于脚本本身并不大,您也可以将 Html5Gen.phpsrc 文件夹中复制出来,以使用脚本而无需Composer。

使用方法

require 'vendor/autoload.php';
 
use Html5Gen\Html5Gen as H; // shorthand
 
echo
H::html([], function() {
    H::head();
    H::body();
});

输出

<!DOCTYPE html>
<html>
<head></head>
<body></body>
</html>

属性

所有元素都有一个共同点,那就是它们都不期望属性。这也是为什么它是所有方法的第一个参数。您可以通过一个数组指定属性。其中键是属性名称,值是属性值。如果您不想指定属性,请留空数组。如果不使用回调,您也可以省略该数组。

echo
H::html(['lang' => 'en', 'dir' => 'ltr'], function() {
    H::head();
    H::body([], function () {
        H::p(['class' => 'foo bar']);
    });
});

输出

<!DOCTYPE html>
<html lang="en" dir="ltr">
<head></head>
<body><p class="foo bar"></p></body>
</html>

回调

第二个和最后一个参数是用户定义的回调函数。这使得您可以编写更通用的代码,并允许元素的嵌套。使用 yield 关键字,可以在不终止函数的情况下将文本写入当前元素。

注意:像 basebrmetaareainputwbrhrlinkparamsourcecolimg 这样的元素不能有回调,只能有属性。

echo
H::html([], function() {
    H::head([], function () {
        H::meta(['charset' => 'UTF-8']);
    });
    H::body([], function ()
    {
        foreach (range(0, 10) as $number) {
            H::p([], function () use ($number) {
                yield $number;
            });
        }
    });
});

输出

<!DOCTYPE html>
<html>
<head><meta charset="UTF-8"></head>
<body>
<p>0</p>
<p>1</p>
<p>2</p>
<p>3</p>
<p>4</p>
<p>5</p>
<p>6</p>
<p>7</p>
<p>8</p>
<p>9</p>
<p>10</p>
</body>
</html>

自动转义值

脚本将自动检测是否需要转义值。例如,如果您想定义一个 script 标签,那么转义是没有用的,因为这会破坏脚本的逻辑。但是,如果您使用一个 pre 标签,转义值就更有意义了。这也适用于属性。

echo
H::html([], function() {
    H::head([]);
    H::body([], function () {
        // A really bad attribute value
        H::pre(['id' => '"\'"'], function () {
            yield '<script>alert(1);</script>'; // maybe some user code?
        });
        
        // Be careful with that and do not use user code in it
        H::script([], function () {
            yield 'var x = Math.floor(Math.random() * 100);';
            yield 'alert(0 < x < 100);';
        });
    });
});

输出

<!DOCTYPE html>
<html>
<head></head>
<body>
<pre id="&quot;'&quot;">&lt;script&gt;alert(1);&lt;/script&gt;</pre>
<script>var x = Math.floor(Math.random() * 100);alert(0 < x < 100);</script>
</body>
</html>

[待办事项] 清单

  • 元素存在该属性吗?(找到一个更好的实现方法!)
  • 给定的属性值对指定的属性是否允许?
  • 元素在当前元素中是否允许?
  • 检查文档中的不良做法。例如重复的id引用。
  • 检查 nonceintegrity 属性的正确性。

贡献

请随时贡献。任何帮助都受欢迎。

许可

此项目根据MIT许可协议许可。