복붙노트

PHP에서 텍스트의 URL 추출

PHP

PHP에서 텍스트의 URL 추출

나는이 본문을 가지고있다.

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

링크를 다른 변수로 추출하려면 어떻게해야합니까?

나는 그것이 정규식 특히 preg_match ()를 사용하여 있어야한다는 것을 알고 있지만 어떻게 해야할지 모르겠다.

해결법

  1. ==============================

    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. ==============================

    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. ==============================

    3.URL은 매우 복잡한 정의를 가지고 있습니다. 먼저 캡처 할 내용을 결정해야합니다. http : // 및 https : //로 시작하는 간단한 예제는 다음과 같습니다.

    URL은 매우 복잡한 정의를 가지고 있습니다. 먼저 캡처 할 내용을 결정해야합니다. http : // 및 https : //로 시작하는 간단한 예제는 다음과 같습니다.

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

    이것은 매우 기본이며 잘못된 URL을 캡처 할 수 있습니다. 좀 더 복잡한 것에 대해서는 POSIX와 PHP 정규식을 따라 잡는 것이 좋습니다.

  4. ==============================

    4.URL을 추출한 텍스트가 사용자가 제출하고 결과를 링크로 표시하려면 XSS 취약성, 특히 "javascript :"프로토콜 URL을 눈에 띄지 않도록 조심해야합니다. 또한 형식이 잘못되었습니다 정규 표현식 및 / 또는 표시 브라우저를 속여서 자바 스크립트 URL로 실행하도록하는 URL입니다. 최소한 "http", "https"또는 "ftp"로 시작하는 URL 만 허용해야합니다.

    URL을 추출한 텍스트가 사용자가 제출하고 결과를 링크로 표시하려면 XSS 취약성, 특히 "javascript :"프로토콜 URL을 눈에 띄지 않도록 조심해야합니다. 또한 형식이 잘못되었습니다 정규 표현식 및 / 또는 표시 브라우저를 속여서 자바 스크립트 URL로 실행하도록하는 URL입니다. 최소한 "http", "https"또는 "ftp"로 시작하는 URL 만 허용해야합니다.

    Jeff의 블로그 항목에는 URL 추출과 관련된 다른 문제가 설명되어 있습니다.

  5. ==============================

    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. ==============================

    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. ==============================

    7.

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

    이것은 모든 경우가 아니라 많은 경우에 효과가있는 쉬운 방법입니다. 모든 경기는 $ 경기에 넣어집니다. 이것은 앵커 요소 (

  8. ==============================

    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. ==============================

    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. ==============================

    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. ==============================

    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; 
        }
    }
    
  12. from https://stackoverflow.com/questions/910912/extract-urls-from-text-in-php by cc-by-sa and MIT license