m-fedosov/kphp-markdown-parser

Markdown 解析器。适用于 KPHP

dev-main 2022-11-27 19:18 UTC

This package is auto-updated.

Last update: 2024-09-18 23:16:45 UTC


README

KParsedown

概述

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

https://:8080/

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 的成熟,兼容性应该会提高。