cr4zyfl1x / bbcode
用 PHP 编写的一个简单的 BBCode '解析器'。它使用正则表达式,因此无法处理复杂的嵌套标签。
v1.1.4
2023-08-25 22:50 UTC
Requires
- php: >=8.0
- ext-mbstring: *
Requires (Dev)
- phpunit/phpunit: ^10.3.0
This package is not auto-updated.
Last update: 2024-09-27 22:28:35 UTC
README
一个解析 BBCode 并将其转换为 HTML 代码的库。用 PHP 编写。
安装
通过 Composer
composer require cr4zyfl1x/bbcode
从那时起,你可以运行 composer update
来获取此库的最新版本。
可以在不使用 Composer 的情况下使用此库,但此时必须注册一个 自动加载函数。
此库需要 PHP 8.0 或更高版本。
使用示例
以下是一个使用此库的最小化 PHP 代码示例。它假设存在自动加载器。
$bbcode = new Cr4zyFl1x\BBCode\BBCode();
$rendered = $bbcode->render('[b]Hello world![/b]');
echo $rendered;
可用标签
[b]
: 粗体字体 -[b]Hello world[/b]
[i]
: 斜体字体 -[i]Hello world[/i]
[s]
: 删除线字体 -[s]Hello world[/s]
[u]
: 下划线字体 -[u]Hello world[/u]
[code]
: 代码 -[code]Hello world[/code]
[email]
: 邮件(可点击) -[email]test@example.com[/email]
[url]
: 网址(可点击) -[url=http://example.com]Example.com[/url]
[img]
: 图片(不可点击) -[img]http://example.com/example.png[/img]
[quote]
: 引用 -[quote]Hello world[/quote]
[youtube]
: 嵌入式 YouTube 视频 -[youtube]a-video-id-123456[/youtube]
[font]
: 字体(名称) -[font=Arial]Hello world![/font]
[size]
: 字体大小 -[size=12]Hello world![/size]
[color]
: 字体颜色 -[color=red]Hello world![/color]
[left]
: 文本对齐:左对齐 -[left]Hello world[/left]
[center]
: 文本对齐:居中 -[center]Hello world[/center]
[right]
: 文本对齐:右对齐 -[right]Hello world[/right]
[spoiler]
: 预告(需要 JavaScript 代码添加行为) -[spoiler]Hello world[/spoiler]
[br]
: 换行符 -第一行[br]第二行
[hr]
: 水平线 -上边线[hr]下边线
- 列表
[list]
: 列表 -[list]...列表项...[/list]
[*]
: 列表中的列表项 -[*]Hello world!\r\n[*]Hello moon!
[li]
: 列表中的列表项(别名) -[li]Hello world!\r\n[/li][li]Hello moon!/[li]
- 完整示例:
[list][*]Hello world![li]Hello moon![/li][/list]
你可以使用 addTag($name, Closure $closure)
方法添加自定义标签。
有用的方法
renderRaw($text = null)
: 仅渲染文本而不包含任何标签addTag($name, Closure $closure)
: 添加一个自定义标签(带有名称和闭包)forgetTag($name)
: 删除具有给定名称的标签ignoreTag($name)
: 将标签添加到忽略标签数组中permitTag($name)
: 从忽略标签数组中删除标签
BBCode
类还实现了 __toString()
方法,该方法内部调用 render()
方法。
自定义标签示例
此代码将添加一个 [h1]
BBCode 标签,该标签创建一个 <h1>
HTML 标签
$bbcode->addTag('h1', function($tag, &$html, $openingTag) {
if ($tag->opening) {
return '<h1>';
} else {
return '</h1>';
}
});
多字节字符
此库支持使用多字节字符。
分支
此存储库最初是从 chriskonnertz/bbcode 分支出来的。
状态
此存储库的状态:维护中。创建一个问题,你将得到一个回复,通常在 48 小时内。