vlstelmakh/url-highlight

从字符串输入解析URL的库

v3.1.1 2024-09-15 17:36 UTC

README

Url highlight logo

Build status Packagist version PHP version License

Url highlight - 用于从字符串输入解析URL的PHP库。适用于复杂URL、边缘情况和编码输入。

功能

  • 将字符串中的URL替换为HTML标签(使其可点击)
  • 根据顶级域名匹配无协议的URL
  • 与HTML实体编码的输入一起工作
  • 从字符串中提取URL
  • 检查字符串是否是URL

🚀 查看示例 👀

安装

使用 Composer 安装最新版本

composer require vstelmakh/url-highlight

此外,还有 Twig logo Twig 扩展Symfony logo 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('&lt;a href=&quot;http://example.com&quot;&gt;Example&lt;/a&gt;');
// return: '&lt;a href=&quot;<a href="http://example.com">http://example.com</a>&quot;&gt;Example&lt;/a&gt;'

💡 提示:对于自定义行为 - 创建并使用实现 EncoderInterface 的自定义编码器。
请注意 - 使用编码器需要更多的正则表达式操作,可能会影响性能。如果您不期望遇到编码字符串,最好不要使用编码器。

鸣谢

Volodymyr Stelmakh
许可协议:MIT许可。更多信息请参阅 LICENSE