vlstelmakh / url-highlight
从字符串输入解析URL的库
Requires
- php: ^7.1 || ^8
- ext-json: *
- ext-mbstring: *
- symfony/polyfill-php72: ^1.10
Requires (Dev)
- phpbench/phpbench: ^0.16 || ^1.2.6
- phpstan/phpstan: ^1.4
- phpunit/phpunit: ^7.5.3 || ^8 || ^9.3
- squizlabs/php_codesniffer: ^3.7.1
- vstelmakh/covelyzer: ^0.2
README
Url highlight - 用于从字符串输入解析URL的PHP库。适用于复杂URL、边缘情况和编码输入。
功能
- 将字符串中的URL替换为HTML标签(使其可点击)
- 根据顶级域名匹配无协议的URL
- 与HTML实体编码的输入一起工作
- 从字符串中提取URL
- 检查字符串是否是URL
安装
使用 Composer 安装最新版本
composer require vstelmakh/url-highlight
此外,还有 Twig 扩展 和
Symfony 扩展包 可用。
快速开始
<?php require __DIR__ . '/vendor/autoload.php'; use VStelmakh\UrlHighlight\UrlHighlight; $urlHighlight = new UrlHighlight(); echo $urlHighlight->highlightUrls('Hello, http://example.com.'); // Output: // Hello, <a href="http://example.com">http://example.com</a>.
💡 提示:有关自定义高亮显示,请参阅 Highlighter。要正确处理HTML实体转义字符串,请参阅 Encoder。
用法
检查字符串是否是URL
<?php $urlHighlight->isUrl('http://example.com'); // return: true $urlHighlight->isUrl('Other string'); // return: false
从字符串解析URL
<?php $urlHighlight->getUrls('Hello, http://example.com.'); // return: ['http://example.com']
通过HTML标签替换URL(使其可点击)
<?php $urlHighlight->highlightUrls('Hello, http://example.com.'); // return: 'Hello, <a href="http://example.com">http://example.com</a>.'
配置
有3个部分可以根据您的需要进行配置
- Validator - 定义匹配是否有效以及是否应识别为URL(例如,允许/禁止特定协议)
- Highlighter - 定义URL应如何高亮显示(例如,用html
<a>
标签替换) - Encoder - 定义如何处理编码输入(例如,HTML特殊字符)
通过构造函数实现相应接口的实例提供配置。使用 null
保留默认设置
<?php use VStelmakh\UrlHighlight\Encoder\HtmlSpecialcharsEncoder; use VStelmakh\UrlHighlight\UrlHighlight; use VStelmakh\UrlHighlight\Validator\Validator; $validator = new Validator(); $encoder = new HtmlSpecialcharsEncoder(); $urlHighlight = new UrlHighlight($validator, null, $encoder);
Validator
库中包含一个Validator。默认情况下使用以下设置。
🛠️ Validator 使用示例
<?php use VStelmakh\UrlHighlight\UrlHighlight; use VStelmakh\UrlHighlight\Validator\Validator; $validator = new Validator( true, // bool - if should use top level domain to match urls without scheme [], // string[] - array of blacklisted schemes [], // string[] - array of whitelisted schemes true // bool - if should match emails (if match by TLD set to "false" - will match only "mailto" urls) ); $urlHighlight = new UrlHighlight($validator);
💡 提示:如果您需要自定义行为,请创建并使用自己的Validator实现 ValidatorInterface。
Highlighter
库中包含2个Highlighter
-
HtmlHighlighter - 将匹配项转换为HTML标签。
示例:http://example.com
→<a href="http://example.com">http://example.com</a>
-
MarkdownHighlighter - 将匹配项转换为Markdown格式。
示例:http://example.com
→[http://example.com](http://example.com)
默认情况下,使用 HtmlHighlighter
,以下为示例设置。
🛠️ Highlighter 使用示例
<?php use VStelmakh\UrlHighlight\Highlighter\HtmlHighlighter; use VStelmakh\UrlHighlight\UrlHighlight; $highlighter = new HtmlHighlighter( 'http', // string - scheme to use for urls matched by top level domain [], // string[] - key/value map of tag attributes, e.g. ['rel' => 'nofollow', 'class' => 'light'] '', // string - content to add before highlight: {here}<a... '' // string - content to add after highlight: ...</a>{here} ); $urlHighlight = new UrlHighlight(null, $highlighter);
💡 提示:如果您需要自定义行为,则扩展 HtmlHighlighter 或实现 HighlighterInterface。
有关更多详细信息,请参阅 🖍️ 自定义Highlighter。
Encoder
编码器应被用于正确处理编码后的输入。例如,HTML转义字符串可能包含类似于以下内容:http://example.com?a=1"
或 http://example.com?a=1∧b=2
,这可能会导致错误地将其匹配为URL。
默认情况下,不使用编码器。库中包含2个编码器
- HtmlEntitiesEncoder - 用于处理HTML实体编码的字符串(任何预期将被HTML实体编码的字符)
- HtmlSpecialcharsEncoder - 用于处理HTML转义字符串(只有
&
"
'
<
>
预期将被编码)
🛠️ 编码器使用示例
<?php use VStelmakh\UrlHighlight\Encoder\HtmlSpecialcharsEncoder; use VStelmakh\UrlHighlight\UrlHighlight; $encoder = new HtmlSpecialcharsEncoder(); $urlHighlight = new UrlHighlight(null, null, $encoder); $urlHighlight->highlightUrls('<a href="http://example.com">Example</a>'); // return: '<a href="<a href="http://example.com">http://example.com</a>">Example</a>'
💡 提示:对于自定义行为 - 创建并使用实现 EncoderInterface 的自定义编码器。
请注意 - 使用编码器需要更多的正则表达式操作,可能会影响性能。如果您不期望遇到编码字符串,最好不要使用编码器。
鸣谢
Volodymyr Stelmakh
许可协议:MIT许可。更多信息请参阅 LICENSE。