...vagy amit akartok!

...vagy amit akartok!

URL-ek linkesítése szövegben

2009. február 11. - adambrunner

Bent merült fel ismét a probléma, hogy hogyan lehet a legegyszerűbben lecserélni egy szövegben a benne található webcímeket (URL) kattintható HTML linkekre. A megtalálásuk igazából annyira nem volt bonyolult, aki írt már pár reguláris kifejezést (regular expression), annak szerintem egy 10-15 perces ujjgyakorlat:

/(?:[a-z]+:\/\/)?(?:\S+?(?::\S+?)?@)?(?:[a-z0-9][a-z0-9-]*[a-z0-9]\.)+[a-z]{2,6}(?:(?:\/|\?).*?(?=\s|<|$))?/imx

Viszont mi van azokkal az URL-ekkel, amik elé nem lett kitéve a protokoll azonosító (pl. http://)? Erre találtam ki azt, hogy – úgysem tudjuk elkerülni azt, hogy ne csak egy preg_replace() legyen – akkor minden href-be rakjuk bele egyből a "http://"-t az elejére és majd utána cseréljük le a "http://protokoll://"-t a "protokoll://"-re.

A kész és működő kód itt látható:

preg_replace(
    array(
        '/
        # protocol (optional)
        (?:[a-z]+:\/\/)?         # username:password@ (optional)
        (?:\S+?(?::\S+?)?@)?
        # domain name without tld
        (?:[a-z0-9][a-z0-9-]*[a-z0-9]\.)+
        # tld
        [a-z]{2,6}
        # path, query string, fragment (optional)
        (?:
            # path separator (slash) or query string separator (?)
            (?:\/|\?)
            # anything until a whitespace, tag opening character (<) or EOL or EOF
            .*?
            (?=\s|<|$)
        )?
        /imx',
        '/http:\/\/([a-z]+:\/\/)/'
    ),
    array(
        '<a href="http://$0">$0</a>',
        '$1'
    ),
    $text
);

Amennyiben találnál olyan URL-t, amire a fenti kód nem működik, kérlek tudasd velem és tovább finomítom. URL-ek, amiket próbáltam már (HTML tag-ek között is):

  • username:password@example.com/path/file.html?queryString
  • http://example.com
  • https://username@example.com/path?foo=bar+baz#fragment
  • sub.example.com?foo=bar

A bejegyzés trackback címe:

https://adambrunner.blog.hu/api/trackback/id/tr2938021

Kommentek:

A hozzászólások a vonatkozó jogszabályok  értelmében felhasználói tartalomnak minősülnek, értük a szolgáltatás technikai  üzemeltetője semmilyen felelősséget nem vállal, azokat nem ellenőrzi. Kifogás esetén forduljon a blog szerkesztőjéhez. Részletek a  Felhasználási feltételekben és az adatvédelmi tájékoztatóban.

Nincsenek hozzászólások.
süti beállítások módosítása