Php parse links/emails

前端 未结 4 1088
时光取名叫无心
时光取名叫无心 2020-12-06 08:11

I am wondering if there is a simple snippet which converts links of any kind:

http://www.cnn.com to http://www.cnn.com&l         


        
相关标签:
4条回答
  • 2020-12-06 08:24

    Here's the email snippet:

    $email = "abc@def.com";
    
    $pos = strrpos($email, "@");
    if (!$pos === false) {
        // This is an email address!
        $email .= "mailto:" . $email;
    }
    

    What exactly are you looking to do with the links? strip the www or http? or add http://www to any link if required?

    0 讨论(0)
  • 2020-12-06 08:35

    Try this out. (for links not email)

    $newTweet = preg_replace('!http://([a-zA-Z0-9./-]+[a-zA-Z0-9/-])!i', '<a href="\\0" target="_blank">\\0</a>', $tweet->text);
    
    0 讨论(0)
  • 2020-12-06 08:36

    yes , http://www.gidforums.com/t-1816.html

    <?php
    /**
       NAME        : autolink()
       VERSION     : 1.0
       AUTHOR      : J de Silva
       DESCRIPTION : returns VOID; handles converting
                     URLs into clickable links off a string.
       TYPE        : functions
       ======================================*/
    
    function autolink( &$text, $target='_blank', $nofollow=true )
    {
      // grab anything that looks like a URL...
      $urls  =  _autolink_find_URLS( $text );
      if( !empty($urls) ) // i.e. there were some URLS found in the text
      {
        array_walk( $urls, '_autolink_create_html_tags', array('target'=>$target, 'nofollow'=>$nofollow) );
        $text  =  strtr( $text, $urls );
      }
    }
    
    function _autolink_find_URLS( $text )
    {
      // build the patterns
      $scheme         =       '(http:\/\/|https:\/\/)';
      $www            =       'www\.';
      $ip             =       '\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}';
      $subdomain      =       '[-a-z0-9_]+\.';
      $name           =       '[a-z][-a-z0-9]+\.';
      $tld            =       '[a-z]+(\.[a-z]{2,2})?';
      $the_rest       =       '\/?[a-z0-9._\/~#&=;%+?-]+[a-z0-9\/#=?]{1,1}';            
      $pattern        =       "$scheme?(?(1)($ip|($subdomain)?$name$tld)|($www$name$tld))$the_rest";
    
      $pattern        =       '/'.$pattern.'/is';
      $c              =       preg_match_all( $pattern, $text, $m );
      unset( $text, $scheme, $www, $ip, $subdomain, $name, $tld, $the_rest, $pattern );
      if( $c )
      {
        return( array_flip($m[0]) );
      }
      return( array() );
    }
    
    function _autolink_create_html_tags( &$value, $key, $other=null )
    {
      $target = $nofollow = null;
      if( is_array($other) )
      {
        $target      =  ( $other['target']   ? " target=\"$other[target]\"" : null );
        // see: http://www.google.com/googleblog/2005/01/preventing-comment-spam.html
        $nofollow    =  ( $other['nofollow'] ? ' rel="nofollow"'            : null );     
      }
      $value = "<a href=\"$key\"$target$nofollow>$key</a>";
    } 
    
    ?>
    
    0 讨论(0)
  • 2020-12-06 08:44

    I know is 5 years late, however I needed a similar solution and the best answer I got was from the user - erwan-dupeux-maire

    Answer

    I write this function. It replaces all the links in a string. Links can be in the following formats :

    • www.example.com
    • http://example.com
    • https://example.com
    • example.fr

    The second argument is the target for the link ('_blank', '_top'... can be set to false). Hope it helps...

    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 讨论(0)
提交回复
热议问题