patrickschur / html5gen
一个易于使用的PHP编写的HTML5生成器。创建有效且安全的HTML5代码。
v1.1.0
2017-12-23 18:04 UTC
Requires
- php: >=5.5
Requires (Dev)
- php: ^7.0
- phpunit/phpunit: ^6.0
This package is auto-updated.
Last update: 2024-09-17 00:54:45 UTC
README
一个易于使用的PHP编写的HTML5生成器。创建有效且安全的HTML5代码。
安装
要安装库,我建议使用Composer。执行以下命令
$ composer require patrickschur/html5gen
或者将其添加到您的 composer.json
{ "require": { "patrickschur/html5gen": "*" } }
由于脚本本身并不大,您也可以将 Html5Gen.php
从 src
文件夹中复制出来,以使用脚本而无需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
关键字,可以在不终止函数的情况下将文本写入当前元素。
注意:像
base
、br
、meta
、area
、input
、wbr
、hr
、link
、param
、source
、col
和img
这样的元素不能有回调,只能有属性。
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=""'""><script>alert(1);</script></pre> <script>var x = Math.floor(Math.random() * 100);alert(0 < x < 100);</script> </body> </html>
[待办事项] 清单
- 元素存在该属性吗?(找到一个更好的实现方法!)
- 给定的属性值对指定的属性是否允许?
- 元素在当前元素中是否允许?
- 检查文档中的不良做法。例如重复的id引用。
- 检查
nonce
和integrity
属性的正确性。
贡献
请随时贡献。任何帮助都受欢迎。
许可
此项目根据MIT许可协议许可。