2010-11-18 10 views
9

में एक यूआरएल में लिंक जोड़ें मेरे पास एक ऐसा फ़ंक्शन है जो लिंक के पहले <a href> टैग और </a> लिंक के बाद जोड़ देगा। हालांकि, यह कुछ वेबपृष्ठों के लिए टूट जाता है। आप इस समारोह में कैसे सुधार करेंगे? धन्यवाद!PHP - एक स्ट्रिंग

function processString($s) 
{ 
    // check if there is a link 

    if(preg_match("/http:\/\//",$s)) 
    { 
     print preg_match("/http:\/\//",$s); 


     $startUrl = stripos($s,"http://"); 

     // if the link is in between text 
     if(stripos($s," ",$startUrl)){ 
      $endUrl = stripos($s," ",$startUrl); 
     } 
     // if link is at the end of string 
     else {$endUrl = strlen($s);} 

     $beforeUrl = substr($s,0,$startUrl); 
     $url = substr($s,$startUrl,$endUrl-$startUrl); 
     $afterUrl = substr($s,$endUrl); 

     $newString = $beforeUrl."<a href=\"$url\">".$url."</a>".$afterUrl; 

     return $newString; 
    } 

    return $s; 
} 
+0

regex एक छोटे से खराब है, लेकिन मेरे इनपुट के 99% सही URL यदि कोई – AlexBrand

+4

क्या वेबपेजों इसके लिए तोड़ करता होगा? –

+0

शुरुआत में आप फिर भी https का परीक्षण करते हैं, लेकिन बाद में आप "एस" छोड़ देते हैं। पता नहीं, अगर यह इस त्रुटि का कारण बनता है, क्योंकि मुझे यह भी पता नहीं है कि कौन से पृष्ठ टूटे हैं;) – KingCrunch

उत्तर

18
function processString($s) { 
    return preg_replace('/https?:\/\/[\w\-\.!~#?&=+\*\'"(),\/]+/','<a href="$0">$0</a>',$s); 
} 
+0

मुझे लगता है कि एक "=" गायब है: यह विफल रहता है जब यूआरएल में पैरामीटर होते हैं। मैंने इसे "&" के बाद अभी जोड़ा है और अब यह काम करता है: 'preg_replace ('/ https?: \/\/[\ W \ - \।! ~? = = \ \ * \'"(), \ /] +/',' $0 ', $ s) ' – Narcolessico

+4

आप # अंदर के पते के बारे में भूल गए हैं - तो अधिक सही संस्करण' preg_replace ('/ https?: \/\/[\ W \ - \।! ~ # ? & = + \ * \ '"(), \ /] + /', '$0', $ टेक्स्ट)' –

+0

मैंने इन दो जोड़ों को दर्शाने के लिए अभी जवाब संपादित किया है। –

1

यह सभी URL "विशेष" एचटीएमएल वर्ण हो के लिए टूट जाता है। सुरक्षित होने के लिए, उन्हें एक साथ संयोजित करने से पहले htmlspecialchars() के माध्यम से तीन स्ट्रिंग घटकों को पास करें (जब तक आप यूआरएल के बाहर एचटीएमएल को अनुमति नहीं देना चाहते)।

1
function processString($s){ 
    return preg_replace('@((https?://)?([-\w]+\.[-\w\.]+)+\w(:\d+)?(/([-\w/_\.]*(\?\S+)?)?)*)@', '<a href="$1">$1</a>', $s); 
} 

मिले यह here

+0

यहां विफल रहता है: ' http: //www.xyz.com/~this-does-not-work! ' – stillstanding

+0

मैचों" ए ... ए "- अजीब – AlexBrand

+0

वही परिदृश्य मुझे jquery/जावास्क्रिप्ट में चाहिए। क्या कोई मदद कर सकता है? – Yuv

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