PHP에서 텍스트의 URL 추출
PHPPHP에서 텍스트의 URL 추출
나는이 본문을 가지고있다.
$string = "this is my friend's website http://example.com I think it is coll";
링크를 다른 변수로 추출하려면 어떻게해야합니까?
나는 그것이 정규식 특히 preg_match ()를 사용하여 있어야한다는 것을 알고 있지만 어떻게 해야할지 모르겠다.
해결법
-
==============================
1.아마도 가장 안전한 방법은 WordPress의 코드 스 니펫을 사용하는 것입니다. 최신 버전 (현재 3.1.1)을 다운로드하고 wp-includes / formatting.php를 참조하십시오. make_clickable이라는 함수가 있는데이 함수는 param에 대한 일반 텍스트를 가지고 있으며 형식이 지정된 문자열을 반환합니다. URL 추출을위한 코드를 가져올 수 있습니다. 그래도 꽤 복잡합니다.
아마도 가장 안전한 방법은 WordPress의 코드 스 니펫을 사용하는 것입니다. 최신 버전 (현재 3.1.1)을 다운로드하고 wp-includes / formatting.php를 참조하십시오. make_clickable이라는 함수가 있는데이 함수는 param에 대한 일반 텍스트를 가지고 있으며 형식이 지정된 문자열을 반환합니다. URL 추출을위한 코드를 가져올 수 있습니다. 그래도 꽤 복잡합니다.
이 한 줄 정규식이 도움이 될 수 있습니다.
preg_match_all('#\bhttps?://[^\s()<>]+(?:\([\w\d]+\)|([^[:punct:]\s]|/))#', $string, $match);
하지만이 정규식은 여전히 일부 잘못된 URL (예 : http : // google : ha.ckers.org)을 삭제할 수 없습니다.
참조 : StackOverflow 자동 링크 동작을 모방하는 방법
-
==============================
2.나는 Wordpress를 사용하여 Nobu가 말했지만 다른 WordPress 기능에 대한 많은 의존성 대신 preg_match_all ()에 대한 Nobu의 정규 표현식을 사용하고 preg_replace_callback ()을 사용하여 함수로 변환했습니다. 클릭 가능한 링크로 텍스트의 모든 링크를 바꿉니다. 익명 함수를 사용하므로 PHP 5.3이 필요하거나 일반 함수를 사용하도록 코드를 다시 작성할 수 있습니다.
나는 Wordpress를 사용하여 Nobu가 말했지만 다른 WordPress 기능에 대한 많은 의존성 대신 preg_match_all ()에 대한 Nobu의 정규 표현식을 사용하고 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); }
-
==============================
3.URL은 매우 복잡한 정의를 가지고 있습니다. 먼저 캡처 할 내용을 결정해야합니다. http : // 및 https : //로 시작하는 간단한 예제는 다음과 같습니다.
URL은 매우 복잡한 정의를 가지고 있습니다. 먼저 캡처 할 내용을 결정해야합니다. http : // 및 https : //로 시작하는 간단한 예제는 다음과 같습니다.
preg_match_all('!https?://\S+!', $string, $matches); $all_urls = $matches[0];
이것은 매우 기본이며 잘못된 URL을 캡처 할 수 있습니다. 좀 더 복잡한 것에 대해서는 POSIX와 PHP 정규식을 따라 잡는 것이 좋습니다.
-
==============================
4.URL을 추출한 텍스트가 사용자가 제출하고 결과를 링크로 표시하려면 XSS 취약성, 특히 "javascript :"프로토콜 URL을 눈에 띄지 않도록 조심해야합니다. 또한 형식이 잘못되었습니다 정규 표현식 및 / 또는 표시 브라우저를 속여서 자바 스크립트 URL로 실행하도록하는 URL입니다. 최소한 "http", "https"또는 "ftp"로 시작하는 URL 만 허용해야합니다.
URL을 추출한 텍스트가 사용자가 제출하고 결과를 링크로 표시하려면 XSS 취약성, 특히 "javascript :"프로토콜 URL을 눈에 띄지 않도록 조심해야합니다. 또한 형식이 잘못되었습니다 정규 표현식 및 / 또는 표시 브라우저를 속여서 자바 스크립트 URL로 실행하도록하는 URL입니다. 최소한 "http", "https"또는 "ftp"로 시작하는 URL 만 허용해야합니다.
Jeff의 블로그 항목에는 URL 추출과 관련된 다른 문제가 설명되어 있습니다.
-
==============================
5.너는 이렇게 할 수있어 ..
너는 이렇게 할 수있어 ..
<?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
-
==============================
6.나를 위해 일한 코드 (특히 $ 문자열에 여러 링크가있는 경우)는 다음과 같습니다.
나를 위해 일한 코드 (특히 $ 문자열에 여러 링크가있는 경우)는 다음과 같습니다.
$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 />'; }
희망은 다른 사람들에게도 도움이됩니다.
-
==============================
7.
preg_match_all('/[a-z]+:\/\/\S+/', $string, $matches);
이것은 모든 경우가 아니라 많은 경우에 효과가있는 쉬운 방법입니다. 모든 경기는 $ 경기에 넣어집니다. 이것은 앵커 요소 (
-
==============================
8.
preg_match_all ("/a[\s]+[^>]*?href[\s]?=[\s\"\']+". "(.*?)[\"\']+.*?>"."([^<]+|.*?)?<\/a>/", $var, &$matches); $matches = $matches[1]; $list = array(); foreach($matches as $var) { print($var."<br>"); }
-
==============================
9.이 링크를 찾아서 링크를 수정할 수 있습니다 (href 링크 추가).
이 링크를 찾아서 링크를 수정할 수 있습니다 (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.phpsocialnews
-
==============================
10.이 정규 표현식은 나를 위해 훌륭하게 작동하며 모든 유형의 URL을 검사했습니다.
이 정규 표현식은 나를 위해 훌륭하게 작동하며 모든 유형의 URL을 검사했습니다.
<?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 ?>
많은 URL을 확인하면 http://www.rubular.com/r/bFHobduQ3n에서 확인할 수 있습니다.
-
==============================
11.
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; } }
from https://stackoverflow.com/questions/910912/extract-urls-from-text-in-php by cc-by-sa and MIT license
'PHP' 카테고리의 다른 글
GMAIL 메일 서버를 사용하여 PHP로 XAMPP를 실행하는 localhost에서 전자 메일 보내기 (0) | 2018.09.13 |
---|---|
클래스 이름으로 DOM 요소 가져 오기 (0) | 2018.09.13 |
PHP ini file_get_contents 외부 URL (0) | 2018.09.13 |
PHP에서 이미지 출력하기 (0) | 2018.09.13 |
PHP로 PDF 파일보기 (0) | 2018.09.12 |