2017 © Pedro PelĂĄez
 

library urllinker

Autolink URLs in text or html

image

youthweb/urllinker

Autolink URLs in text or html

  • Wednesday, January 31, 2018
  • by Art4
  • Repository
  • 9 Watchers
  • 4 Stars
  • 11,869 Installations
  • PHP
  • 1 Dependents
  • 0 Suggesters
  • 1 Forks
  • 1 Open issues
  • 4 Versions
  • 16 % Grown

The README.md

UrlLinker

Latest Version Software License Build Status codecov Total Downloads, (*1)

UrlLinker converts any web addresses in plain text into HTML hyperlinks., (*2)

This is a maintained fork of the great work of Kwi\UrlLinker, formerly on Bitbucket., (*3)

Install

Via Composer, (*4)

$ composer require youthweb/urllinker

Note: On 2025-07-17 the repository was moved from https://github.com/youthweb/urllinker to https://github.com/Art4/urllinker, but the packagist name was kept for convenience., (*5)

Usage

$urlLinker = new Youthweb\UrlLinker\UrlLinker();

$linkedText = $urlLinker->linkUrlsAndEscapeHtml($text);

$linkedText = $urlLinker->linkUrlsInTrustedHtml($html);

You can optional configure different options for parsing URLs by passing them to UrlLinker::__construct():, (*6)

$config = [
    // Ftp addresses like "ftp://example.com" will be allowed, default false
    'allowFtpAddresses' => true,

    // Uppercase URL schemes like "HTTP://exmaple.com" will be allowed:
    'allowUpperCaseUrlSchemes' => true,

    // Add a Closure to modify the way the urls will be linked:
    'htmlLinkCreator' => function(string $url, string $content): string
    {
        return '<a href="' . $url . '" target="_blank">' . $content . '</a>';
    },

    // ..or add a callable as a Closure to modify the way the urls will be linked:
    'htmlLinkCreator' => [$class, 'linkCreator'](...),

    // Add a Closure to modify the way the emails will be linked:
    'emailLinkCreator' => function(string $email, string $content): string
    {
        return '<a href="mailto:' . $email . '" class="email">' . $content . '</a>';
    },

    // ... or add a callable as a Closure to modify the way the emails will be linked:
    'emailLinkCreator' => \Closure::fromCallable('callableFunction'),

    // ... or you can also disable the links for email with a closure:
    'emailLinkCreator' => fn (string $email, string $content): string => $email,

    // You can customize the recognizable Top Level Domains:
    'validTlds' => ['.localhost' => true],
];

$urlLinker = new Youthweb\UrlLinker\UrlLinker($config);

Recognized addresses

  • Web addresses
    • Recognized URL schemes: "http" and "https"
    • The http:// prefix is optional.
    • Support for additional schemes, e.g. "ftp", can easily be added by setting allowFtpAddresses to true.
    • The scheme must be written in lower case. This requirement can be lifted by setting allowUpperCaseUrlSchemes to true.
    • Hosts may be specified using domain names or IPv4 addresses.
    • IPv6 addresses are not supported.
    • Port numbers are allowed.
    • Internationalized Resource Identifiers (IRIs) are allowed. Note that the job of converting IRIs to URIs is left to the user's browser.
    • To reduce false positives, UrlLinker verifies that the top-level domain is on the official IANA list of valid TLDs.
    • UrlLinker is updated from time to time as the TLD list is expanded.
    • In the future, this approach may collapse under ICANN's ill-advised new policy of selling arbitrary TLDs for large amounts of cash, but for now it is an effective method of rejecting invalid URLs.
    • Internationalized top-level domain names must be written in Punycode in order to be recognized.
    • If you want to support only some specific TLD you can set them with validTlds e.g. ['.com' => true, '.net' => true].
    • If you need to support unqualified domain names, such as localhost, you can also set them with ['.localhost' => true] in validTlds.
  • Email addresses
    • Supports the full range of commonly used address formats, including "plus addresses" (as popularized by Gmail).
    • Does not recognized the more obscure address variants that are allowed by the RFCs but never seen in practice.
    • Simplistic spam protection: The at-sign is converted to a HTML entity, foiling naive email address harvesters.
    • If you don't want to link emails you can set closure that simply returns the raw email with a closure function($email, $content) { return $email; } in emailLinkCreator.
  • Addresses are recognized correctly in normal sentence contexts. For instance, in "Visit stackoverflow.com.", the final period is not part of the URL.
  • User input is properly sanitized to prevent cross-site scripting (XSS), and ampersands in URLs are correctly escaped as &amp; (this does not apply to the linkUrlsInTrustedHtml() function, which assumes its input to be valid HTML).

Changelog

Please see CHANGELOG for more information what has changed recently., (*7)

Tests

Unit tests are written using PHPUnit., (*8)

$ phpunit

Contributing

Please feel free to submit bugs or to fork and sending Pull Requests. This project follows Semantic Versioning 2 and PER Coding Style 3.0., (*9)

License

GPL3. Please see License File for more information., (*10)

The Versions

31/01 2018

dev-master

9999999-dev https://github.com/youthweb

Autolink URLs in text or html

  Sources   Download

GPL3 GPL-3.0-or-later

The Requires

  • php ^5.6 || ^7.0

 

The Development Requires

by Søren Løvborg
by Dawid Nowak

24/08 2017

1.2.0

1.2.0.0 https://github.com/youthweb

Autolink URLs in text or html

  Sources   Download

GPL3

The Requires

  • php ^5.6 || ^7.0

 

The Development Requires

by Søren Løvborg
by Dawid Nowak

10/04 2017

1.1.0

1.1.0.0 https://github.com/youthweb

Autolink URLs in text or html

  Sources   Download

GPL3

The Requires

  • php ^5.6 || ^7.0

 

The Development Requires

by Søren Løvborg
by Dawid Nowak

05/09 2016

1.0.0

1.0.0.0 https://github.com/youthweb

Autolink URLs in text or html

  Sources   Download

GPL3

The Requires

  • php >=5.6

 

The Development Requires

by Søren Løvborg
by Dawid Nowak