Tìm kiếm URL và tạo liên kết trong nội dung

Thứ năm - 14/10/2021 05:07
Hàm php tự động tìm các link chưa được liên kết (chưa nằm trong thẻ a, không click được) và chuyển thành link được liên kết (có thể click được)
Chức năng cơ bản của hàm này là tìm tất cả các URL trong văn bản và tự động thêm liên kết (có thể click được) cho các URL đó.

Với hàm này, bạn có thể tự động tạo liên kết cho các URL có hoặc không có tên giao thức, email, twitter.
 
function makeLinks($value, $protocols = array('http', 'mail'), array $attributes = array()){    // Link attributes    $attr = '';    foreach ($attributes as $key => $val) {        $attr = ' ' . $key . '="' . htmlentities($val) . '"';    }    $links = array();    // Extract existing links and tags    $value = preg_replace_callback('~(<a .*?>.*?</a>|<.*?>)~i', function ($match) use (&$links) {        return '<' . array_push($links, $match[1]) . '>';    }, $value);    // Extract text links for each protocol    foreach ((array) $protocols as $protocol) {        switch ($protocol) {            case 'http':            case 'https':                $value = preg_replace_callback('~(?:(https?)://([^\s<]+)|(www\.[^\s<]+?\.[^\s<]+))(?<![\.,:])~i', function ($match) use ($protocol, &$links, $attr) {                    if ($match[1]) $protocol = $match[1];                    $link = $match[2] ?: $match[3];                    return '<' . array_push($links, "<a $attr href=\"$protocol://$link\">$link</a>") . '>';                }, $value);                break;            case 'mail':                $value = preg_replace_callback('~([^\s<]+?@[^\s<]+?\.[^\s<]+)(?<![\.,:])~', function ($match) use (&$links, $attr) {                    return '<' . array_push($links, "<a $attr href=\"mailto:{$match[1]}\">{$match[1]}</a>") . '>';                }, $value);                break;            case 'twitter':                $value = preg_replace_callback('~(?<!\w)[@#](\w++)~', function ($match) use (&$links, $attr) {                    return '<' . array_push($links, "<a $attr href=\"https://twitter.com/" . ($match[0][0] == '@' ? '' : 'search/%23') . $match[1] . "\">{$match[0]}</a>") . '>';                }, $value);                break;            default:                $value = preg_replace_callback('~' . preg_quote($protocol, '~') . '://([^\s<]+?)(?<![\.,:])~i', function ($match) use ($protocol, &$links, $attr) {                    return '<' . array_push($links, "<a $attr href=\"$protocol://{$match[1]}\">{$match[1]}</a>") . '>';                }, $value);                break;        }    }    // Insert all link    return preg_replace_callback('/<(\d+)>/', function ($match) use (&$links) {        return $links[$match[1] - 1];    }, $value);}
Tham khảo https://gist.github.com/jasny/2000705
 

Những tin mới hơn

Những tin cũ hơn

Tổng số điểm của bài viết là: 0 trong 0 đánh giá

Click để đánh giá bài viết
Bạn đã không sử dụng Site, Bấm vào đây để duy trì trạng thái đăng nhập. Thời gian chờ: 60 giây