Discuz!官方免费开源建站系统

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

[疑难] UCH 分享的时候如何显示目标网页的标题

[复制链接]
理之萌也 发表于 2009-8-27 16:28:21 | 显示全部楼层 |阅读模式
UCH 分享的时候如何显示目标网页的标题 比如像校内 开心 这种 输入一个链接 分享能够直接显示网页的 meta describtion的信息。。。。我在网上找了一些相关的
       在PHP中有现成的函数get_meta_tags可以直接获取到一个网页所有的meta信息。它的用法比较简单,如下所述:

<?php
//获取一个网页的meta信息
$url       =     "http://www.benxiaohai.com";
$meta   =     get_meta_tags($url);
//在这里还应该注意网页的编码问题,编码如果不一致,可以用iconv进行转码
print_r($meta);
//它将会返回一个标准的一维数组,如果meta信息为空,则返回一个空数组       这个函数是很方便,但是有时候会得到我们想得到更多的信息,这时候就应该再多加一些变化来使用了。下面的一段代码是一个简单的搜索引擎。因为搜索引擎可能只需要meta信息中的keyword和decription信息,所以其它多于的都会过滤掉。

<?php
function get_meta_data($html) {
preg_match_all(
"|<meta[^>]+name=\\"([^\\"]*)\\"[^>]+content=\\"([^\\"]*)\\"[^>]+>|i",   $html, $out,PREG_PATTERN_ORDER);
for ($i=0;$i < count($out[1]);$i++) {
//这里对这个数组进行遍历,取得自己想要的标签
if (strtolower($out[1][$i]) == "keywords") $meta['keywords'] = $out[2][$i];
if (strtolower($out[1][$i]) == "description") $meta['description'] = $out[2][$i];
}
return $meta;
}
?>

        接下来的这段代码是一个基于这个的应用

<?php
function getUrlData($url)
{
$result = false;

$contents = getUrlContents($url);
if (isset($contents) && is_string($contents))
{
$title = null;
$metaTags = null;

preg_match('/<title>([^>]*)<\/title>/si', $contents, $match );
if (isset($match) && is_array($match) && count($match) > 0)
{
$title = strip_tags($match[1]);
}

preg_match_all('/<[\s]*meta[\s]*name="?' . '([^>"]*)"?[\s]*' . 'content="?([^>"]*)"?[\s]*[\/]?[\s]*>/si', $contents, $match);

if (isset($match) && is_array($match) && count($match) == 3)
{
$originals = $match[0];
$names = $match[1];
$values = $match[2];

if (count($originals) == count($names) && count($names) == count($values))
{
$metaTags = array();

for ($i=0, $limiti=count($names); $i < $limiti; $i++)
{
$metaTags[$names[$i]] = array (
'html' => htmlentities($originals[$i]),
'value' => $values[$i]
);
}
}
}

$result = array (
'title' => $title,
'metaTags' => $metaTags
);
}

return $result;
}
function getUrlContents($url, $maximumRedirections = null, $currentRedirection = 0)
{
$result = false;

$contents = @file_get_contents($url);

// Check if we need to go somewhere else

if (isset($contents) && is_string($contents))
{
preg_match_all('/<[\s]*meta[\s]*http-equiv="?REFRESH"?' . '[\s]*content="?[0-9]*;[\s]*URL[\s]*=[\s]*([^>"]*)"?' . '[\s]*[\/]?[\s]*>/si', $contents, $match);

if (isset($match) && is_array($match) && count($match) == 2 && count($match[1]) == 1)
{
if (!isset($maximumRedirections) || $currentRedirection < $maximumRedirections)
{
return getUrlContents($match[1][0], $maximumRedirections, ++$currentRedirection);
}

$result = false;
}
else
{
$result = $contents;
}
}

return $contents;
}

$result = getUrlData('http://www.benxiaohai.com');
echo '<pre>'; print_r($result); echo '</pre>';
/****************************************得到的结果如下*******************************
Array
(
     [title] => 笨小孩心情驿站 - 老天爱笨小孩
     [metaTags] => Array
         (
             [author] => Array
                 (
                     [html] => <meta name="author" content="&ccedil;&not;¨&aring;°&#65533;&aring;&shy;&copy;&aring;&iquest;&#65533;&aelig;&#65533;&#65533;é&copy;&iquest;&ccedil;&laquo;&#65533;" />
                     [value] => 笨小孩心情驿站
                 )

             [description] => Array
                 (
                     [html] => <meta name="description" content="è&#65533;&#65533;&aring;¤&copy;&ccedil;&#65533;±&ccedil;&not;¨&aring;°&#65533;&aring;&shy;&copy;" />
                     [value] => 老天爱笨小孩
                 )

             [keywords] => Array
                 (
                     [html] => <meta name="keywords" content="&ccedil;&not;¨&aring;°&#65533;&aring;&shy;&copy;&aring;&iquest;&#65533;&aelig;&#65533;&#65533;é&copy;&iquest;&ccedil;&laquo;&#65533;" />
                     [value] => 笨小孩心情驿站
                 )

         )

)
****************************************************************************/
?>
再下面的这段代码,将根据各个标签的长度给出优化建议,可以稍加修改,做出更完美的

<?php
$url   =   "http://www.benxiaohai.com";
$result =   get_meta_tags($url);
if(is_array($result)){
   foreach($result as $key=>$value){
     $key = strtolower($key);
     switch ($key){
       case "keywords":
         $rs["keywords"] = $value;
         break;
       case "description":
         $rs["description"]= $value;
         break;
       case "author":
         $rs["author"]   = $value;
         break;
       case "robots":
         $rs["robots"]   = $value;
         break;
       case "copyright":
         $rs["copyright"] = $value;
         break;
     }
   }
}else
{
   echo "没有任何meta标签";
}
if(empty($rs["robots"])){
   echo "没有Robots标签";
}
if(empty($rs["copyright"])){
   echo "<br>页面没有任何版权信息";
}
if(empty($rs["author"])){
   echo "<br>没有作者信息";
}
if(empty($rs["description"])){
   echo "<br>没有页面描述信息";
}
if(empty($rs["keywords"])){
   echo "<br>没有关键词信息";
}
?>

可是我不会应用 谁能给个方法
 楼主| 理之萌也 发表于 2009-8-27 16:46:48 | 显示全部楼层
自己顶自己顶自己顶自己顶自己顶
回复

使用道具 举报

tonhoo 发表于 2009-8-27 17:18:45 | 显示全部楼层
我看看,这么长啊!   

www.tonhoo.com
回复

使用道具 举报

 楼主| 理之萌也 发表于 2009-8-27 21:48:21 | 显示全部楼层
3# tonhoo


求高手帮助
回复

使用道具 举报

 楼主| 理之萌也 发表于 2009-8-27 23:09:43 | 显示全部楼层
能够实现了 找到cp_share.php 里面//添加分享 里面         //添加分享

                        $arr['title_template'] = cplang('share_link');
                        $getContent= get_meta_tags($link);
                        echo $getContent['description'];
                        $arr['body_template'] =$getContent['description'];
                                                 $link_text =sub_url($link, 45);

也就是加入$getContent= get_meta_tags($link);
                        echo $getContent['description']; 然后把$arr['body_template'] ={link} 改成
$getContent['description'];

但是有些会出现乱码 估计是编码的问题 我不会转化 希望高手指教
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|Discuz! 官方站 ( 皖ICP备16010102号 )star

GMT+8, 2024-11-17 14:29 , Processed in 0.023012 second(s), 3 queries , Gzip On, Redis On.

Powered by Discuz! X3.4

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表