2009-11-25 18 views
5

Giả sử tôi có một loạt các văn bản nhưthay thế bất kỳ url trong một chuỗi văn bản, các liên kết có thể click với php

$text = "Hello world, be sure to visit http://whatever.com today"; 

thế nào tôi có thể (có thể sử dụng regex) chèn các thẻ neo cho liên kết (hiển thị chính liên kết đó là văn bản liên kết)?

+1

trùng lặp: Xem # 1.038.284 - http://stackoverflow.com/questions/1038284/php-parse-links-emails – Sampson

Trả lời

15

Bạn có thể sử dụng regexp để làm điều này:

$html_links = preg_replace('"\b(https?://\S+)"', '<a href="$1">$1</a>', $text); 
+0

câu trả lời của bạn làm việc như một nét duyên dáng nhưng nếu tôi muốn kiểm tra cũng hiện diện của www như thế nào tôi sẽ làm điều đó? – Sarah

+0

@Sarah trừ khi bạn muốn nhắm mục tiêu cụ thể tất cả url chỉ chứa www, điều này sẽ bắt được những URL đó. Nếu bạn cần kiểm tra www, thì chỉ cần thêm www \. như vậy: '\ b (http: // www \. \ S +)' và điều đó sẽ chỉ bắt URL với www. – mason81

+0

Nếu tài liệu chứa các ký tự không phải ascii (như ngôn ngữ Châu Á), bạn có thể thay thế "\ S +" cho: "[0-9a-zA-Z -._ ~: /? # \ [\] @! $ & '() * +,; =] + "nếu các URL chỉ là ký tự ascii (othewise không thay đổi nó) – lepe

2

tôi viết chức năng này. Nó thay thế tất cả các liên kết trong một chuỗi. Liên kết có thể trong các định dạng sau:

Đối số thứ hai là mục tiêu cho liên kết (' _blank ',' _top '... có thể được đặt thành false). Hy vọng nó sẽ giúp ...

public static function makeLinks($str, $target='_blank') 
{ 
    if ($target) 
    { 
     $target = ' target="'.$target.'"'; 
    } 
    else 
    { 
     $target = ''; 
    } 
    // find and replace link 
    $str = preg_replace('@((https?://)?([-\w]+\.[-\w\.]+)+\w(:\d+)?(/([-\w/_\.]*(\?\S+)?)?)*)@', '<a href="$1" '.$target.'>$1</a>', $str); 
    // add "http://" if not set 
    $str = preg_replace('/<a\s[^>]*href\s*=\s*"((?!https?:\/\/)[^"]*)"[^>]*>/i', '<a href="http://$1" '.$target.'>', $str); 
    return $str; 
} 
+0

sau một vài giờ googling này là câu trả lời hoàn hảo trong trường hợp của tôi. –

Các vấn đề liên quan