PHP 从多个 URL 获取站点标题

Posted

技术标签:

【中文标题】PHP 从多个 URL 获取站点标题【英文标题】:PHP get site title from multiple URLs 【发布时间】:2018-08-16 12:45:28 【问题描述】:

我有一堆链接。我需要从中提取标题。所以,我想让 textarea 粘贴链接和“获取标题”之类的按钮来提取标题。我做了一个函数来从一个 URL 中提取标题。它工作正常。我是 php 的新手,我不知道如何检测换行符以获取 url。谁能帮帮我?

这是我的代码

<?php
 function getTitle($url) 
 $data = file_get_contents($url);
$title = preg_match('/<title[^>]*>(.*?)<\/title>/ims', $data, $matches) ? $matches[1] : null;
return $title;
 

 echo getTitle('http://example.com');
 ?>

【问题讨论】:

可能是explode() 函数? ***.com/questions/3577641/… 你是用form submit还是ajax发送textarea内容 我正在使用表单提交 【参考方案1】:

请尝试此代码。当我们使用函数file_get_contents获取数据时,我们应该检查该数据的长度。

 function get_title($url)
      $str = file_get_contents($url);
      if(strlen($str)>0)
        $str = trim(preg_replace('/\s+/', ' ', $str)); // supports line breaks inside <title>
        preg_match("/\<title\>(.*)\<\/title\>/i",$str,$title); // ignore case
        return $title[1];
      
    
    //For Example:
 echo get_title("***.com/"); 

输出是:

Stack Overflow - Where Developers Learn, Share, & Build Careers

【讨论】:

这正是我现在所拥有的。我想粘贴多个 url,例如 example.com otherexample.com 等,然后为他们输出标题 example1 title otherexample title【参考方案2】:

您可以为它们使用 preg_split()

$urls = $_REQUEST['urlArea'];

function getTitle($url) 
    $data = file_get_contents($url);
    $title = preg_match('/<title[^>]*>(.*?)<\/title>/ims', $data, $matches) ? $matches[1] : null;
    return $title;


// split by new-line character(\r\n or \r or \n)
$arr_url = preg_split('/\r\n|[\r\n]/', $urls);

foreach($arr_url as $url) 
    echo getTitle($url);

编辑:为完整代码添加的函数

【讨论】:

嗯,它似乎可以工作,但它没有回应任何标题。我现在的代码 function getTitle($url) $urls = $_REQUEST['urlArea']; $arr_url = preg_split('/\r\n|[\r\n]/', $urls); foreach($arr_url as $url) echo getTitle($url); 你递归调用了 getTitle() 函数。我用完整的代码编辑了我的答案 见鬼!这就是我要找的。非常感谢! @MMPL1 这是我的荣幸 :)

以上是关于PHP 从多个 URL 获取站点标题的主要内容,如果未能解决你的问题,请参考以下文章

PHP 获取站点 URL 协议 - http 与 https

如何从PHP中的URL获取多个同名参数并将所有记录插入表中

使用 slug url 从 mysql db 获取文章

从 php 脚本获取响应

Nginx RegEx 对多个站点进行重写或内部重定向循环

使用 PHP 获取和返回媒体 url (m3u8)