league / commonmark-ext-external-link
Requires
- php: ^7.1
- league/commonmark: ^1.3
Requires (Dev)
- phpunit/phpunit: ^7.5
This package is auto-updated.
Last update: 2020-04-04 14:22:14 UTC
README
已弃用
此扩展已被弃用。现在所有功能都包含在 league/commonmark
1.3+ 的 League\CommonMark\Extension\ExternalLink
命名空间中,因此您应升级到该版本并使用该捆绑扩展而不是此扩展。
概述
此扩展为 league/commonmark
PHP Markdown 解析器 而设计,可以检测指向外部站点的链接并根据需要进行标记调整
- 添加
rel="noopener noreferrer"
属性 - 可选地添加任何自定义 HTML 类
安装
通过 Composer
$ composer require league/commonmark-ext-external-link
用法
按常规配置您的 环境
,然后简单添加此软件包提供的 ExternalLinkExtension
use League\CommonMark\CommonMarkConverter; use League\CommonMark\Environment; use League\CommonMark\Ext\ExternalLink\ExternalLinkExtension; // Obtain a pre-configured Environment with all the CommonMark parsers/renderers ready-to-go $environment = Environment::createCommonMarkEnvironment(); // Add this extension $environment->addExtension(new ExternalLinkExtension()); // Set your configuration $config = [ 'external_link' => [ 'internal_hosts' => 'www.example.com', 'open_in_new_window' => true, 'html_class' => 'external-link', ], ]; // Instantiate the converter engine and start converting some Markdown! $converter = new CommonMarkConverter($config, $environment); echo $converter->convertToHtml('I successfully installed the https://github.com/thephpleague/commonmark-ext-external-link extension!');
配置
此扩展在 external_link
配置下支持三个配置选项
internal_hosts
此选项定义了白名单中的主机,这些主机被视为非外部,不应接受外部链接处理。
这可以是一个单个主机名,如 'example.com'
,必须完全匹配。
如果您需要匹配子域名,请使用正则表达式,如 '/(^|\.)example\.com$/'
。注意,您必须使用 /
字符分隔您的正则表达式。
此配置选项还接受多个字符串和/或正则表达式的数组
$config = [ 'external_link' => [ 'internal_hosts' => ['foo.example.com', 'bar.example.com', '/(^|\.)google\.com$/], ], ];
默认情况下,如果没有提供此选项,则所有链接都将被视为外部链接。
open_in_new_window
此选项(默认为 false
)确定是否应在新标签页/窗口中打开任何外部链接。
html_class
此选项允许您提供一个包含一个或多个要添加到外部链接 <a>
标签的 HTML 类的 string
:默认情况下不添加任何类。
高级渲染
当检测到外部链接时,ExternalLinkProcessor
将将 external
数据选项设置在 Link
节点中为 true
或 false
。因此,您可以创建一个 自定义链接渲染器,该渲染器检查此值并相应地处理
class MyCustomLinkRenderer implements InlineRendererInterface { /** * @param Link $inline * @param ElementRendererInterface $htmlRenderer * * @return HtmlElement */ public function render(AbstractInline $inline, ElementRendererInterface $htmlRenderer) { if (!($inline instanceof Link)) { throw new \InvalidArgumentException('Incompatible inline type: ' . \get_class($inline)); } if ($inline->getData('external')) { // This is an external link - render it accordingly } else { // This is an internal link } // ... } }
变更日志
有关最近更改的更多信息,请参阅 变更日志
测试
$ composer test
安全
如果您发现任何与安全相关的问题,请通过电子邮件 colinodell@gmail.com 而不是使用问题跟踪器来报告。
鸣谢
许可
此库采用 BSD-3 许可协议。有关更多信息,请参阅 许可文件