【问题标题】:Linkify URLs with PHP, trim outputted urls length用 PHP 链接 URL,修剪输出的 url 长度
【发布时间】:2018-03-11 12:25:29
【问题描述】:

我正在尝试将文本自动格式化为 PHP 中的链接,但将长 URL 修剪到最大字符限制。并从输出的文本中删除“http(s)”。

blah blah http://example.com/some-long-slug-goes-here foo

应该翻译成:

blah blah <a href="http://example.com/some-long-slug-goes-here">example.com/some-long-sl...</a> foo (blah blah example.com/some-long-sl... foo)

在此处找到preg_replace 解决方案:How do I linkify urls in a string with php?,但我无法根据需要对其进行编辑。

$string = preg_replace(
  "~[[:alpha:]]+://[^<>[:space:]]+[[:alnum:]/]~",
  "<a href=\"\\0\">\\0</a>", 
  $string
);

【问题讨论】:

  • 正如@chris85 提到的,并将其用作替换&lt;a href="\0"&gt;\1&lt;/a&gt;(显然已转义)

标签: php regex


【解决方案1】:

在协议之后创建一个捕获组:

$string = preg_replace(
  "~[[:alpha:]]+://([^<>[:space:]]+[[:alnum:]/])~",
  "<a href=\"\\0\">\\1</a>", 
  $string
);

那么\1 将是没有协议的URL。对于文本限制,我建议使用 CSS,Setting a max character length in css

【讨论】:

  • 谢谢,这解决了! :) 是否也可以删除“www.”?
  • 是的,将www. 放在协议之后但在捕获组之前,您可能还想要那个可选的.. 所以将开头更新为[[:alpha:]]+://(?:www\.)?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-17
  • 1970-01-01
  • 2017-06-08
  • 1970-01-01
  • 1970-01-01
  • 2017-10-03
相关资源
最近更新 更多