Linkify PHP text

烈酒焚心 提交于 2019-12-02 17:52:47

问题


I am using the TinySong api to generate a link, It works, now I tried using a linkify for it. It didn't. I'm not sure why it is not linkifing I believe I used the right variable. Here is the code.

<?php
  // linkify URLs
  $pre = preg_replace(
    '/(https?:\/\/\S+)/',
    '<a href="\1">\1</a>',
    $pre
  );
?>
 <script src="http://platform.twitter.com/anywhere.js?id= MY API KEY&v=1" type="text/javascript"></script>
<?php



class Tinysong
{
    protected $api_key = '';
    protected $method = '';
    protected $limit = '';
    protected $query_string = '';


    public static $CURL_OPTS = array(
        CURLOPT_CONNECTTIMEOUT => 10,
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_TIMEOUT        => 60,
        CURLOPT_USERAGENT      => 'tinysong-php-0.7',
    );


    public function __construct($api_key)
    {
        $this->api_key = $api_key;

    }




    /**
     * A wrapper for RESTful method /a/ (single 
     * @return @Tinysong
     */
    public function single_tinysong_link($query_string)
    {
        $this->query_string($query_string);
        return $this->method('a');
    }

       public function search($query_string)
    {
        $this->query_string($query_string);
        return $this->method('a');
    }

    /**
     * A wrapper for RESTful method /s/ (search)
     * @return Tinysong
     */


    /**
     * Sets the query string
     * @return Tinysong
     */
    public function query_string($query_string)
    {
        $this->query_string = urlencode($query_string);
        return $this;

 }

    /**
     *
     * @param type $method 
     * @return Tinysong
     */
    public function method($method)
    {
        $this->method = $method;
        return $this;
    }


    /**
     * Fetchs the data based on the parameters
     * @param bool $clean_params cleans the params after build the url
     * @param resource $ch a custom php curl resource
     * @return array an associative array with the data
     */
    public function execute($clean_params = true, $ch = null)
    {

        $url = $this->build_query();

        if ($clean_params)
        {
            $this->clean_params();
        }

        if (!$ch)
        {
            $ch = curl_init($url);
            curl_setopt_array($ch, self::$CURL_OPTS);
        }


        $query_result = curl_exec($ch);

        curl_close($ch);


        return  json_decode($query_result, true);

    }


    /**
     * Builds an API query based on the parameters
     * @return string the query
     */
    public function build_query()
    {
        $url = "http://tinysong.com";
        $url .= '/'.$this->method.'/';
        $url .= $this->query_string.'?';

        if ($this->limit)
        {
            $url .= 'limit='.$this->limit;
        }


        $url .= '&key='.$this->api_key;
        $url .= '&format=json';

        return $url;
    }


    /**
     * Cleans the params (method, query string and limit)
     * @return Tinysong
     */
    public function clean_params()
    {
        $this->method       = '';
        $this->query_string = '';
        $this->limit        = '';
    }




}


?>

How do I make the result link clickable? Am I even using the right code?? Thanks


回答1:


This is working well on the sites I am using it for...

function find_urls($t){
    $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($reg_exUrl, $t, $url)) {
        $add='';
        if (substr($url[0],(strlen($url[0])-1),strlen($url[0]))==")"){
            $url[0]=substr($url[0],0,(strlen($url[0])-1));
            $add=')';
        } else if (substr($url[0],(strlen($url[0])-1),strlen($url[0]))=="]"){
            $url[0]=substr($url[0],0,(strlen($url[0])-1));
            $add=']';
        }
        // make the urls hyper links
        return preg_replace($reg_exUrl, '<a href="'.$url[0].'">'.$url[0].'</a>'.$add, $t);
    } else {
        // if no urls in the text just return the text
        return $t;
    }
}



回答2:


This is the only one i found that worked with www.

function link_it($text)
{
    $text= preg_replace("/(^|[\n ])([\w]*?)((ht|f)tp(s)?:\/\/[\w]+[^ \,\"\n\r\t<]*)/is", "$1$2<a     href=\"$3\" >$3</a>", $text);
    $text= preg_replace("/(^|[\n ])([\w]*?)((www|ftp)\.[^ \,\"\t\n\r<]*)/is", "$1$2<a href=\"http://$3\" >$3</a>", $text);
    $text= preg_replace("/(^|[\n ])([a-z0-9&\-_\.]+?)@([\w\-]+\.([\w\-\.]+)+)/i", "$1<a href=\"mailto:$2@$3\">$2@$3</a>", $text);
    return($text);
}

Hopefully this will help someone else



来源:https://stackoverflow.com/questions/9250216/linkify-php-text

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!