Thỉnh thoảng, trong các bài viết, chúng ta thường chèn những địa chỉ (url) của những trang web khác vào bên trong nội dung. Nếu như ta dùng các trình soạn thảo để gắn link cho từng url thì sẽ rất mất công và tốn thời gian.

3d internet concept.

Hôm nay mình tiếp tục chia sẻ cho các bạn một đoạn code bằng PHP. Đoạn code này sẽ tự động nhận dạng các url trong bài viết, rồi biến nó thành dạng link có thể liên kết được. Để dễ hiểu, các bạn có thể tham khảo cách dùng như sau :

$string = 'I have some texts here and also links such as http://www.youtube.com , www.thuthuatweb.net and lol@example.com. They are ready to be replaced.';
echo make_clickable($string);

Như các bạn đã thấy ở đoạn code bên trên, ngoài các url là các địa chỉ trang web, chúng ta còn có thể tự động tạo link cho các địa chỉ email. Và đây, không để các bạn chờ lâu nữa, để tạo được tính năng này, các bạn copy toàn bộ đoạn PHP bên dưới để sử dụng cho những mục đích của mình.

function _make_url_clickable_cb($matches) {
    $ret = '';
    $url = $matches[2];
    if ( empty($url) )
        return $matches[0];
    // removed trailing [.,;:] from URL
    if ( in_array(substr($url, -1), array('.', ',', ';', ':')) === true ) {
        $ret = substr($url, -1);
        $url = substr($url, 0, strlen($url)-1);
    }
    return $matches[1] . "<a href=\"$url\" rel=\"nofollow\">$url</a>" . $ret;
}
function _make_web_ftp_clickable_cb($matches) {
    $ret = '';
    $dest = $matches[2];
    $dest = 'http://' . $dest;
    if ( empty($dest) )
        return $matches[0];
    // removed trailing [,;:] from URL
    if ( in_array(substr($dest, -1), array('.', ',', ';', ':')) === true ) {
        $ret = substr($dest, -1);
        $dest = substr($dest, 0, strlen($dest)-1);
    }
    return $matches[1] . "<a href=\"$dest\" rel=\"nofollow\">$dest</a>" . $ret;
}
function _make_email_clickable_cb($matches) {
    $email = $matches[2] . '@' . $matches[3];
    return $matches[1] . "<a href=\"mailto:$email\">$email</a>";
}
function make_clickable($ret) {
    $ret = ' ' . $ret;
    // in testing, using arrays here was found to be faster
    $ret = preg_replace_callback('#([\s>])([\w]+?://[\w\\x80-\\xff\#$%&~/.\-;:=,?@\[\]+]*)#is', '_make_url_clickable_cb', $ret);
    $ret = preg_replace_callback('#([\s>])((www|ftp)\.[\w\\x80-\\xff\#$%&~/.\-;:=,?@\[\]+]*)#is', '_make_web_ftp_clickable_cb', $ret);
    $ret = preg_replace_callback('#([\s>])([.0-9a-z_+-]+)@(([0-9a-z-]+\.)+[0-9a-z]{2,})#i', '_make_email_clickable_cb', $ret);
    // this one is not in an array because we need it to run last, for cleanup of accidental links within links
    $ret = preg_replace("#(<a( [^>]+?>|>))<a [^>]+?>([^>]+?)</a></a>#i", "$1$3</a>", $ret);
    $ret = trim($ret);
    return $ret;
}

Mình mong là đoạn code bên trên sẽ hữu ích cho các bạn, nhớ chia sẻ bài viết cho bạn bè của mình nhá . Và đừng quên để lại lời nhắn dưới dạng comments nếu bạn có bất kì thắc mắc nào trong bài viết này.

Chúc các bạn thành công !

ĐỂ LẠI PHẢN HỒI CỦA BẠN TẠI ĐÂY

Phản hồi về bài viết này

6 COMMENTS

  1. Hurrah! At last I got a webpage from where I know how to in fact obtain valuable
    data regarding my study and knowledge.

  2. you are in point of fact a excellent webmaster.
    The site loading velocity is amazing. It sort of feels that
    you are doing any distinctive trick. Furthermore, The contents are masterpiece.
    you have done a wonderful process in this matter!

  3. Hi! I’m at work surfing around your blog from my new apple iphone!
    Just wanted to say I love reading through your blog
    and look forward to all your posts! Keep up the great work!

  4. Hi this is kind of of off topic but I was wanting to know if blogs use WYSIWYG editors or if
    you have to manually code with HTML. I’m starting a blog soon but have no coding know-how so I wanted
    to get advice from someone with experience. Any help would be enormously appreciated!

LEAVE A REPLY


*