2009-11-25 10 views
5

लिंक के लिए सम्मिलित एंकर टैग मैंपाठ की एक स्ट्रिंग के भीतर किसी भी यूआरएल के बदलने के, php के साथ क्लिक करने योग्य लिंक करने के लिए

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

मैं कैसे (शायद regex का उपयोग कर सकते हैं) के रूप में पाठ इस तरह के एक स्ट्रिंग है कहो (दिखा लिंक खुद को लिंक पाठ के रूप में)?

+1

डुप्लिकेट: देखें # 1,038,284 - http://stackoverflow.com/questions/1038284/php-parse-links-emails – Sampson

उत्तर

15

ऐसा करने के लिए regexp का उपयोग कर सकते हैं:

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

आपका जवाब एक आकर्षण की तरह लेकिन अगर मैं जाँच करना चाहते हैं काम www की उपस्थिति मैं इसे कैसे करूं? – Sarah

+0

@ सराह जब तक आप विशेष रूप से केवल www वाले सभी यूआरएल को लक्षित नहीं करना चाहते हैं, तो उन्हें उनको पकड़ना चाहिए। यदि आपको www की जांच करने की आवश्यकता है, तो बस www \ जोड़ें। इस तरह: '\ b (http: // www \। \ S +)' और उसे केवल www के साथ यूआरएल पकड़ना चाहिए। – mason81

+0

यदि दस्तावेज़ में गैर-असीसी वर्ण (जैसे एशियाई भाषाएं) हैं, तो आप "\ S +" को प्रतिस्थापित कर सकते हैं: "[0-9a-zA-Z -._ ~: /? # \ [\] @! $ & '() * +,; =] + "यदि यूआरएल केवल असीसी वर्ण हैं (othewise इसे नहीं बदलते हैं) – lepe

2

मैं इस समारोह में लिखें। यह एक स्ट्रिंग में सभी लिंक बदल देता है। लिंक निम्न स्वरूपों में हो सकता है:

दूसरा तर्क लिंक के लिए लक्ष्य है (' _blank ',' _top '... को गलत पर सेट किया जा सकता है)। आशा है कि यह मदद करता है ...

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

गुगलिंग के कुछ घंटों के बाद यह मेरे मामले में सही जवाब था। –

संबंधित मुद्दे