दिलचस्प पोस्ट
पृष्ठभूमि-रंग की अस्पष्टता, लेकिन पाठ नहीं initializer_list और स्थानांतरित करें शब्दों अजगर * ऑपरेटर के लिए उचित नाम? विशिष्ट कॉलम बनाएं केवल कीप्रेस ईवेंट में डेटाग्रिड दृश्य में संख्यात्मक मान स्वीकार करें पायथन में कुंजीपटल इनर्रॉप्ट्रॉप को बिना प्रयास किए-को छोड़कर पायथन 3 वेब स्क्रैपिंग में HTTP त्रुटि 403 आईफोन सिम्युलेटर कहां स्टोर करता है? जावा कंपाइलर मंच फ़ाइल एन्कोडिंग समस्या UIPinch में मैक्स / मिन स्केल पिंच ज़ूम यूटिचचरचरकर्ता – आईओएस आईओएस स्विंगप्रॉपर्टी परिवर्तन बदलें गतिशील रूप से JTextArea को अपडेट करने के लिए क्या दो अनुप्रयोग एक ही बंदरगाह को सुन सकते हैं? मैं किसी अन्य प्रोग्राम के विंडो के आकार को कैसे बदलूं? फेरबदल (बेतरतीब ढंग से पुनर्व्यवस्थित) एक सूची <स्ट्रिंग> GDI + में पाठ को कैसे घुमाएंगे? बूटस्ट्रैप 3 आरसी 1 में टाइपआहेड जावास्क्रिप्ट मॉड्यूल कहां है?

PHP में पाठ से यूआरएल निकालें

मेरे पास यह पाठ है:

$string = "this is my friend's website http://example.com I think it is coll"; 

मैं लिंक को एक और चर में कैसे निकाल सकता हूं?

मुझे पता है कि यह नियमित अभिव्यक्ति का उपयोग करके विशेष रूप से preg_match() होना चाहिए लेकिन मुझे नहीं पता कि कैसे?

Solutions Collecting From Web of "PHP में पाठ से यूआरएल निकालें"

शायद सबसे सुरक्षित तरीका वर्डप्रेस से कोड स्निपेट्स का उपयोग कर रहा है नवीनतम एक डाउनलोड करें (वर्तमान में 3.1.1) और देखें wp-includes / formatting.php मेक -क्लेक्लेबल नामक एक फ़ंक्शन है जो परम के लिए सादा पाठ है और स्वरूपित स्ट्रिंग रिटर्न करता है। आप URL को निकालने के लिए कोड प्राप्त कर सकते हैं हालांकि यह बहुत जटिल है।

यह एक लाइन रेगेक्स सहायक हो सकता है

 preg_match_all('#\bhttps?://[^\s()<>]+(?:\([\w\d]+\)|([^[:punct:]\s]|/))#', $string, $match); 

लेकिन यह regex अभी भी कुछ http://google:ha.ckers.org URL (उदा। http://google:ha.ckers.org ) को नहीं निकाल सकता।

यह भी देखें: स्टैक ऑवरफ्लो ऑटो-लिंक व्यवहार की नकल कैसे करें

मैंने ऐसा करने की कोशिश की क्योंकि नोबु ने WordPress का उपयोग करते हुए कहा, लेकिन अन्य वर्डप्रेस कार्यों के लिए ज्यादा निर्भरता के लिए मैं ने preg_match_all() लिए नोबु की नियमित अभिव्यक्ति का उपयोग करने का विकल्प चुना और preg_replace_callback() का उपयोग करते हुए उसे फ़ंक्शन में बदल दिया; एक फ़ंक्शन जो अब क्लिक करने योग्य लिंक के साथ किसी पाठ में सभी लिंक को बदल देता है। यह अनाम कार्यों का उपयोग करता है ताकि आपको PHP 5.3 की ज़रूरत हो, या आप इसके बजाय सामान्य फ़ंक्शन का उपयोग करने के लिए कोड को दोबारा लिख ​​सकते हैं।

 <?php /** * Make clickable links from URLs in text. */ function make_clickable($text) { $regex = '#\bhttps?://[^\s()<>]+(?:\([\w\d]+\)|([^[:punct:]\s]|/))#'; return preg_replace_callback($regex, function ($matches) { return "<a href=\'{$matches[0]}\'>{$matches[0]}</a>"; }, $text); } 

यूआरएल के पास काफी जटिल परिभाषा है – आपको यह तय करना होगा कि आप पहले कैप्चर करना चाहते हैं। http:// और https:// साथ शुरू होने वाली कोई भी चीज़ कैप्चर करने वाला एक सरल उदाहरण हो सकता है:

 preg_match_all('!https?://\S+!', $string, $matches); $all_urls = $matches[0]; 

ध्यान दें कि यह बहुत ही बुनियादी है और अवैध यूआरएल पर कब्जा कर सकता है। मैं अधिक जटिल चीज़ों के लिए POSIX और PHP नियमित अभिव्यक्तियों को पकड़ने की सलाह देता हूं।

यदि यूआरएल से यूआरएल निकाले गए पाठ यूज़र जमा है और आप परिणाम को लिंक के रूप में कहीं भी प्रदर्शित करने जा रहे हैं, तो आपको बहुत सावधान रहना होगा, XSS कमजोरियों से बचने के लिए सावधानी बरतनी चाहिए, सबसे प्रमुख रूप से "जावास्क्रिप्ट:" प्रोटोकॉल यूआरएल, लेकिन यह भी गलत यूआरएल जो आपके रेगेक्सपी और / या प्रदर्शित ब्राउजर को जावास्क्रिप्ट यूआरएल के रूप में निष्पादित करने में मदद कर सकते हैं। बहुत कम से कम, आपको "http", "https" या "ftp" से शुरू होने वाले केवल यूआरएल को ही स्वीकार करना चाहिए।

जेफ द्वारा एक ब्लॉग एंट्री भी है जिसमें वह यूआरएल निकालने के साथ कुछ अन्य समस्याओं का वर्णन करता है।

आप ऐसा कर सकते हैं ..

 <?php $string = "this is my friend's website http://example.com I think it is coll"; echo explode(' ',strstr($string,'http://'))[0]; //"prints" http://example.com 

मेरे लिए काम करने वाला कोड (खासकर यदि आपके पास $ string में कई लिंक हैं):

 $string = "this is my friend's website http://example.com I think it is cool, but this is cooler http://www.memelpower.com :)"; $regex = '/\b(https?|ftp|file):\/\/[-A-Z0-9+&@#\/%?=~_|$!:,.;]*[A-Z0-9+&@#\/%=~_|$]/i'; preg_match_all($regex, $string, $matches); $urls = $matches[0]; // go over all links foreach($urls as $url) { echo $url.'<br />'; } 

उम्मीद है कि दूसरों को भी मदद करता है

 preg_match_all('/[az]+:\/\/\S+/', $string, $matches); 

यह एक आसान तरीका है जो कई मामलों के लिए काम करेगा, न कि सभी। सभी मैच $ मैचों में डाल दिए जाते हैं ध्यान दें कि यह एंकर तत्वों (<a href = "" …) में लिंक को शामिल नहीं करता है, लेकिन वह आपके उदाहरण में नहीं था

 preg_match_all ("/a[\s]+[^>]*?href[\s]?=[\s\"\']+". "(.*?)[\"\']+.*?>"."([^<]+|.*?)?<\/a>/", $var, &$matches); $matches = $matches[1]; $list = array(); foreach($matches as $var) { print($var."<br>"); } 

आप इस लिंक को ढूंढने और लिंक को संशोधित करने की कोशिश कर सकते हैं (href लिंक जोड़ें)।

 $reg_exUrl = "/(http|https|ftp|ftps)\:\/\/[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,3}(\/\S*)?/"; // The Text you want to filter for urls $text = "The text you want to filter goes here. http://note.taable.com"; if(preg_match($reg_exUrl, $text, $url)) { echo preg_replace($reg_exUrl, "<a href="{$url[0]}">{$url[0]}</a> ", $text); } else { echo "No url in the text"; } 

यहां देखें: http://php.net/manual/en/function.preg-match.php सामाजिक समाचार

यह रेगेक्स मेरे लिए बहुत अच्छा काम करता है और मैंने सभी प्रकार के यूआरएल से जाँच की है,

 <?php $string = "Thisregexfindurlhttp://www.rubular.com/r/bFHobduQ3n mixedwithstring"; preg_match_all('/(https?|ssh|ftp):\/\/[^\s"]+/', $string, $url); $all_url = $url[0]; // Returns Array Of all Found URL's $one_url = $url[0][0]; // Gives the First URL in Array of URL's ?> 

यूआरएल के बहुत सारे के साथ चेक किया जा सकता है http://www.rubular.com/r/bFHobduQ3n

 public function find_links($post_content){ $reg_exUrl = "/(http|https|ftp|ftps)\:\/\/[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,3}(\/\S*)?/"; // Check if there is a url in the text if(preg_match_all($reg_exUrl, $post_content, $urls)) { // make the urls hyper links, foreach($urls[0] as $url){ $post_content = str_replace($url, '<a href="'.$url.'" rel="nofollow"> LINK </a>', $post_content); } //var_dump($post_content);die(); //uncomment to see result //return text with hyper links return $post_content; } else { // if no urls in the text just return the text return $post_content; } }