m-fedosov / kphp-markdown-parser
Markdown 解析器。适用于 KPHP
Requires
- php: >=5.3.0
- ext-mbstring: *
Requires (Dev)
- phpunit/phpunit: 9.5.26
This package is auto-updated.
Last update: 2024-09-18 23:16:45 UTC
README
概述
Markdown 解析器在 KPHP 中
KParsedown 是从 Parsedown 分支出来的
特性
- 一个文件
- 无依赖
- 跨语言支持:适用于 PHP 和 KPHP
KParsedown 提供两种方法
# parse file $text = file_get_contents('README.md'); var_dump($parse->text($text)); # parse string var_dump($parse->text('# Hello'));
两种方法都返回 HTML 字符串。请参阅快速入门。
快速入门
使用 composer 创建 vendor/autoload.php
composer dump-autoload
创建 index.php 并在此处编写
<?php require_once __DIR__ . '/vendor/autoload.php'; use Markdown\kparser\parsedown; $parse = new parsedown(); var_dump($parse->text('Hello _Parsedown_!'));
使用 PHP 运行
php -f index.php
string(14) "<h1>Hello</h1>"
使用 KPHP 运行
# Execute result in Terminal ./kphp2cpp --composer-root $(pwd) --mode cli index.php ./kphp_out/cli string(14) "<h1>Hello</h1>"
或
# Execute result in localhost ./kphp2cpp --composer-root $(pwd) index.php ./kphp_out/server -H 8080 -f 1
KParsedown 与 KTemplate 兼容
首先,需要引入 KTemplate
composer require quasilyte/ktemplate
然后,您可以在 'ktemplate_usage' 目录中找到使用示例
使用 PHP 运行
php -f ktemplate_usage/example.php
或
使用 KPHP 运行
kphp --composer-root $(pwd) --mode cli ktemplate_usage/example.php
./kphp_out/cli
然后在浏览器中打开 ktemplate_usage/example.html ))
高级设置
在 KParsedown 中实现了 Parsedown 特性 =^_^=
严格模式
默认情况下,KParsedown 尝试解析任何字符串
严格模式 - 启用
####级别 1
级别 1
$Parsedown->setStrictMode(false);
严格模式 - 禁用
####级别 1
<p>####级别 1<\p>
换行符
默认情况下,当在文件中读取新行时,会自动将换行符设置为 markdown
如果您需要禁用它,请使用
$Parsedown->setBreaksEnabled(false);
安全性
KParsedown 能够在它生成的 HTML 中转义用户输入。此外,KParsedown 会对由 markdown 语法本身引入的额外脚本向量(例如脚本链接目标)进行清理。
要告诉 KParsedown 它正在处理不受信任的用户输入,请使用以下方法
$Parsedown->setSafeMode(true);
标记转义
如果您希望转义受信任输入中的 HTML,可以使用以下方法
$Parsedown->setMarkupEscaped(true);
请注意,这仍然允许用户插入不安全的脚本向量,例如像 xss 这样的链接。
问题
Parsedown 是如何工作的?
它试图像人类一样读取 Markdown。首先,它查看行。它对行的开始感兴趣。这有助于它识别块。例如,它知道如果一行以 - 开头,那么它可能属于列表。一旦它识别了块,它就会继续到内容。在阅读的过程中,它会注意特殊字符。这有助于它识别内联元素(或内联)。
它与 CommonMark 兼容吗?
它通过了大多数 CommonMark 测试。大多数未通过测试的情况相当不常见。随着 CommonMark 的成熟,兼容性应该会提高。