PHP实现对站点内容外部链接的过滤方法

熟悉SEO的朋友都知道,对于网站外部链接失效的情况如果链接带有rel="nofollow"属性可以避免不必要的损失。本文就以实例形式演示了PHP实现对站点内容外部链接的过滤方法。具体如下:

问题描述:原来站内很多文章都是摘录的外部文章,文章里很多链接要么是时间久了失效了,要么就是一些测试的网址,如:http://localhost/ 之类的,链接多了的话,就形成站内很多死链接,这对SEO优化是很不利的。

解决方法:需要对站点内的内容进行过滤,将不是内部链接的链接加上 rel="nofollow"属性。

本文借鉴了wordpress的过滤外部链接的函数,将其改一下即可使用。

具体代码如下:

//外部链接增加nofllow $content 内容 $domain 当前网站域名
function content_nofollow($content,$domain){
 preg_match_all('/href="(.*?)"/',$content,$matches);
 if($matches){
 foreach($matches[1] as $val){
  if( strpos($val,$domain)===false ) $content=str_replace('href="'.$val.'"', 'href="'.$val.'" rel="external nofollow" ',$content);
 }
 }
 preg_match_all('/src="(.*?)"/',$content,$matches);
 if($matches){
 foreach($matches[1] as $val){
  if( strpos($val,$domain)===false ) $content=str_replace('src="'.$val.'"', 'src="'.$val.'" rel="external nofollow" ',$content);
 }
 }
 return $content;
}

调用的时候很好调用,如下是调用演示

$a['content'] = content_nofollow($a['content'],$domain);  //将文章内容里的链接增加nofllow属性

注意!这里过滤的域名需要是不带“/”的,如http://www.jb51.net,这样才可以很好的过滤。

相信本文所述的方法对大家的PHP项目开发有一定的借鉴价值。

(0)

相关推荐

  • PHP 配置open_basedir 让各虚拟站点独立运行

    当时觉得这跟IIS相比,实在太差了,因为在IIS里,可以在安全性里设置一个站点甚至一个目录访问时使用的匿名账号,只要各个站点使用的账号不一样,站点间的安全就不会互相影响.这几天才发现,原来当时的想法是错的,在Apache下,也可以配置PHP来实现各站点间的相互独立运行,虽然不能详细控制以某个用户运行某个站点,但至少不会再出现整个服务器被拿下的局面. 通过配置PHP的open_basedir即可以实现该控制,这个配置在IIS下也有用,但这里只讲Apache下的配置. open_basedir可将用

  • 刷新PHP缓冲区为你的站点加速

    在当前 PHP 版本的默认配置下,"输出缓冲(Output Buffering)"是被打开的.旧版本则不是这样,在旧版本的 PHP 中,字符串在每次被输出的时候(通过 echo 或 print 函数),都会触发一次发送到客户端浏览器的动作. "输出缓冲"的引入,使得这一过程更加快速.更加高效.缓冲区实际上是在内存中开辟了一块区域,可以认为是内存中的一个大的字符串.当程序中有字符要输出的时候,会把要输出的内容附加到该缓冲区中,用来替代旧版本 PHP 中每次都直接输出到

  • PHP 清空varnish 缓存的详解(包括指定站点下的)

    没法清空文件夹内容 只能清空指定链接缓存 复制代码 代码如下: <?phpfunction clearVarnish($ip,$url,$host=null){ $errstr = '';    $errno = '';    $varnist_arr = isset($host) ? $host : C('VARNISH_LIST');    foreach ($varnist_arr as $v){        $fp = fsockopen ($ip, 2000, $errno, $er

  • IIS7,IIS7.5 升级PHP5.3后站点变慢的解决方法

    大多数PHP页面实际上都是数据库驱动的,要连接数据库才能显示出来,而响应时间过长的原因便在于PHP 5.3连接数据库的方式有所改变.目前我们配置数据库信息时都类似这样的"$dbhost='localhost' ";这本身是没有问题的,只是PHP 5.3会考虑是IPv4还是IPv6,面对localhost会犹豫,因此出现响应时间过长的情况.如果你查看过服务器处理PHP的时间,你会发现处理PHP的时间很短,等待处理前的时间很长. 也就是连接数据库时本地解析 localhost 为 127.

  • PHP正则表达式替换站点关键字链接后空白的解决方法

    标题这样不知道合适不合适.具体的情况是这样的:网站要增加关键字链接功能,然后需要对文章的内容进行正则表达式匹配并替换,然后使用了preg_replace函数.替换的程序代码如下: function ReplaceKeyword($linkDefs,$content){ $linkMap = array(); /*foreach($linkDefs as $row) { $linkMap[] = explode(',', $row); }*/ $linkMap = $linkDefs; //把原有

  • PHP中对缓冲区的控制实现代码

    大家在使用PHP的过程中不免要使用到header和setcookie两个函数,这两个函数会发送一段文件头信息给浏览器,但是如果在使用这两个函数之前已经有了任何输出(包括空输出,比如空格,回车和换行)就会提示出错,提示信息如下:"Header had all ready send by"!那有什么方法可以在有了输出的情况下面在发送文件头信息呢?在PHP 4.0里面加入了缓冲区控制的几个函数,使用这些函数可以帮我们解决很多问题. 一. 相关函数简介: 1.Flush:输出缓冲区内的内容并且

  • IIS 配置PHP站点的说明

    第一步:配置PHP 如果你下载的是安装版的php(appserv-win32-2.5.9.exe),按照以下步骤配置: 1.将php.ini-dist复制到 C:\Windows 目录下并改名为php.ini,复制php5ts.dll和libmysql.dll到 C:\Windows\system32 中. 2.用记事本打开php.ini,查找"extension_dir",然后把 extension_dir = "./"修改为 extension_dir = &q

  • PHP动态创建Web站点的方法

    PHP有4个用于使用外部函数的函数:include().include_once().require()和require_once(). 为了使用它们,PHP脚本中将包括如下代码行: include_once('arr.php'); require('/path/to/filename.html'); 两种使用外部函数的区别: 使用起来完全一样,只是在出错时会有所不同:include()函数不工作,就会向Web浏览器打印一个讲稿,但是脚本会继续运行,如果require()失败,就会打印一个错误,

  • phpmyadmin中为站点设置mysql权限的图文方法

    为了防止安全隐患,我们一般针对每个数据库都设置了独立的数据库访问帐号,该帐号仅有访问该数据库的权限.下面就让我们来具体演示一下: 1.首先我们要登陆phpMyAdmin,不做演示. 2.创建一个数据库,如下图,在phpMyAdmin右边窗口中,填写数据库名称,点创建即可.      例如我们这里创建一个名字为:cncmstest 的数据库      创建成功会有如下提示: 3.点击左上角的主页按钮,返回phpMyAdmin主界面: 4.在主界面的右边点击"权限"来创建数据库帐号. 5.

  • php控制linux服务器常用功能 关机 重启 开新站点等

    php 里面有个 system 方法, 可以调用系统命令. 先建立一个脚本(比喻 /root/reboot_server.sh ),重启用的. 复制代码 代码如下: #!/bin/bash reboot 再给他赋予权限 4755 chown root:root /root/reboot_server.sh chmod 4755 /root/reboot_server.sh chmod 4777 /sbin/reboot 再在 php 里, 想办法做如下调用 复制代码 代码如下: <?php sy

随机推荐