php 过滤字符串中链接地址

 更新时间:2016年11月25日 15:51  点击:1941

过滤链接最简单的办法就是利用php教程的strip_tags函数,如下

php过滤html的函数:strip_tags(string) 这样就可以过滤掉所有的html标签了。
如果想过滤掉除了<img src="">之外的所有html标签,则可以这样写:strip_tags(string,"<img>");
过滤除了<img src=""><p>xxx</p><b></b>之外的所有html标签,

则可以这样写:

strip_tags(string,"<img><p><b>");

上面的做法不可取,因为它把所有的html都给过滤了,下面我们只要过滤连接部份。

<?php
echo preg_replace("/(?<=href=)([^>]*)(?=>)/i","#", "<a href='www.111cn.net'>你好,点这里看看</a><a href='www.111cn.net'>你好,点这里看看</a>");
?>
正则:/(?<=href=)([^>]*)(?=>)/
(?<=exp) 匹配exp后面的位置
(?=exp) 匹配exp前面的位置
此正则 匹配 在 href= 之后 “>” 之前 的 非 “>” 的所有字符
例子:<a href='www.111cn.net '>

升级一下,我们只过滤其它网站的链接保存自己网站的

 

$str ='<li><a href="http://www.111cn.net/12345s" target="_blank"> 施华洛世奇!</a></li><li><a href=http://123.com/n.php?a=luxury& target="_blank"> f乔</a></li><li><a href="http://mb.111cn.net/" target="_blank"> f衣';

$match='/<li><ashref="?http://[w.]*123.com/[w]+.php?a=*[w&=]*"?s+target="_blank">(.*)</a></li>/isu';
preg_match_all($match,$str,$arr);
echo "<pre>";
print_r($arr[0]);
echo "</pre>";

更多详细内容请查看:http://www.111cn.net/phper/php/35063.htm

查了下,CURL确实很强悍的可以伪造IP和来源,下面看实现有需要的朋友可以参考一下。

1.php教程 请求 2.php 。

1.php代码:


$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "http://localhost/2.php");
curl_setopt($ch, CURLOPT_HTTPHEADER, array('X-FORWARDED-FOR:8.8.8.8', 'CLIENT-IP:8.8.8.8'));  //构造IP
curl_setopt($ch, CURLOPT_REFERER, "http://www.111cn.net/ ");   //构造来路
curl_setopt($ch, CURLOPT_HEADER, 1);
$out = curl_exec($ch);
curl_close($ch);
2.php代码如下:


function getClientIp() {
    if (!empty($_SERVER["HTTP_CLIENT_IP"]))
        $ip = $_SERVER["HTTP_CLIENT_IP"];
    else if (!empty($_SERVER["HTTP_X_FORWARDED_FOR"]))
        $ip = $_SERVER["HTTP_X_FORWARDED_FOR"];
    else if (!empty($_SERVER["REMOTE_ADDR"]))
        $ip = $_SERVER["REMOTE_ADDR"];
    else
        $ip = "err";
    return $ip;
}

echo "IP: " . getClientIp() . "";
echo "referer: " . $_SERVER["HTTP_REFERER"];
伪造成功,这是不是给“刷票”的朋友提供了很好的换IP的方案!!
哈哈

无限分灰一般都会用到递归来实现,下面我们来看看我提供的三个无限分类的读出方法。

数据库教程


--
-- Table structure for table `category`
--
CREATE TABLE IF NOT EXISTS `category` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`catpath` varchar(255) DEFAULT NULL,
`name` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=11 ;
--
-- Dumping data for table `category`
--
INSERT INTO `category` (`id`, `catpath`, `name`) VALUES
(1, '0', '网站首页'),
(2, '0-1', 'Linux OS'),
(3, '0-1', 'Apache服务器'),
(4, '0-1', 'MySQL数据库'),
(5, '0-1', 'PHP脚本语言'),
(6, '0-1-2', 'Linux 系统教程'),
(7, '0-1-2', 'Linux 网络技术'),
(8, '0-1-2', 'Linux 安全基础'),
(9, '0-1-2-7', 'Linux LAMP'),
(10, '0-1-3-10', 'apache Server');

php教程代码

$conn = mysql教程_connect ( 'localhost', 'root', '' );
mysql_select_db ( 'test', $conn );
mysql_query ( 'set names UTF8' );
$sql = "select id,concat(catpath,'-',id) as abspath,name from category order by abspath";
$query = mysql_query ( $sql );
while ( $row = mysql_fetch_array ( $query ) ) {
/**
* 第一种展示方法
*/
/*$space = str_repeat ( ' ', count ( explode ( '-', $row ['abspath'] ) ) - 1 );
echo $space . $row ['name'] . '<br>';*/
/**
* 第二种展示方法
*/
$space = str_repeat ( ' ', count ( explode ( '-', $row ['abspath'] ) ) - 1 );
$option .= '<option value="' . $row ['id'] . '">' . $space . $row ['name'] . '</option>';
}
echo '<select name="opt">' . $option . '</select>';

效果

开发中经常用到关于用程序 模仿用户post信息,下面我介介绍了几种方法,有需要的朋友参考一下。
# <?php教程  
# /** 
# * Socket版本 
# * 使用方法: 
# * $post_string = "app=socket&version=beta"; 
# * request_by_socket('facebook.cn','/restServer.php',$post_string); 
# */ 
# function request_by_socket($remote_server,$remote_path,$post_string,$port = 80,$timeout = 30){  
#     $socket = fsockopen($remote_server,$port,$errno,$errstr,$timeout);  
#     if (!$socket) die("$errstr($errno)");  
#      
#     fwrite($socket,"POST $remote_path HTTP/1.0");  
#     fwrite($socket,"User-Agent: Socket Example");  
#     fwrite($socket,"HOST: $remote_server");  
#     fwrite($socket,"Content-type: application/x-www-form-urlencoded");  
#     fwrite($socket,"Content-length: ".strlen($post_string)+8."");  
#     fwrite($socket,"Accept:*/*");  
#     fwrite($socket,"");  
#     fwrite($socket,"mypost=$post_string");  
#     fwrite($socket,"");  
#      
#     $header = "";  
#     while ($str = trim(fgets($socket,4096))) {  
#         $header.=$str;  
#     }  
#      
#     $data = "";  
#     while (!feof($socket)) {  
#         $data .= fgets($socket,4096);  
#     }  
#      
#     return $data;  
# }  
#  
关socket更详细教程请查看
http://www.111cn.net/phper/30/7cadb3c9195ac7d8ac9104da61a25c6e.htm

# /**  
# * Curl版本  
# * 使用方法:  
# * $post_string = "app=request&version=beta";  
# * request_by_curl('http://facebook.cn/restServer.php',$post_string);  
# */  
# function request_by_curl($remote_server,$post_string){  
#     $ch = curl_init();  
#     curl_setopt($ch,CURLOPT_URL,$remote_server);  
#     curl_setopt($ch,CURLOPT_POSTFIELDS,'mypost='.$post_string);  
#     curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);  
#     curl_setopt($ch,CURLOPT_USERAGENT,"Jimmy's CURL Example beta");  
#     $data = curl_exec($ch);  
#     curl_close($ch);  
#     return $data;  
# } 

cURL库可以简单和有效地去抓网页,您只需要运行一个脚本,然后分析一下您所抓取的网页,然后就可以以程序的方式得到您想要的数据了。无论是您想从一个链接上取部分数据,或是取一个XML文件并把其导入数据库教程,哪怕就是简单的获取网页内容,cURL是一个功能强大的PHP库。本文主要讲述如果使用这个PHP库。

curl参考文献

http://www.111cn.net/phper/18/curl-php.htm

 
# /** 
# * 其它版本 
# * 使用方法: 
# * $post_string = "app=request&version=beta"; 
# * request_by_other('http://facebook.cn/restServer.php',$post_string); 
# */ 
# function request_by_other($remote_server,$post_string){  
#     $context = array(  
#         'http'=>array( 
#             'method'=>'POST', 
#             'header'=>'Content-type: application/x-www-form-urlencoded'."". 
#                       'User-Agent : Jimmy's POST Example beta'."".  
#                       'Content-length: '.strlen($post_string)+8,  
#             'content'=>'mypost='.$post_string)  
#         );  
#     $stream_context = stream_context_create($context);  
#     $data = file_get_contents($remote_server,FALSE,$stream_context);  
#     return $data;  
# }  
#  
# ?>

file_get_contents() 函数把整个文件读入一个字符串中。

和 file() 一样,不同的是 file_get_contents() 把文件读入一个字符串。

file_get_contents() 函数是用于将文件的内容读入到一个字符串中的首选方法。如果操作系统支持,还会使用内存映射技术来增强性能。

参考文献
http://www.111cn.net/phper/24/f8d52eaae81ea27383375ead36ffbd4d.htm

php教程显示文章 几分钟前,几小时前,几天前发布类

文章发表时的UNIX时间戳,来转化为例如 几分钟前,几小时前,几天前 这样的提示。如微博

 这看起来更加人性化


 1 <?php
 2  class timeAgo
 3  { 
 4     static $timeagoObject;  
 5     private $rustle;
 6     private $unit;
 7    
 8      private function __construct()
 9      {
10         
11      }               
12      private function __clone(){ }
13      public static function getObject()
14      {
15          if(! (self::$timeagoObject instanceof self) )
16                 self::$timeagoObject = new timeAgo();
17              
18          return self::$timeagoObject; 
19      }
20      private function count_int($unix_C)   // main function
21      {
22          if(! (isset($unix_C) || is_numeric($unix_C)) )
23              return 'don't find parameter';
24             
25          $d = time()-$unix_C ;   // $d - unix time difference value
26          $d_int =(int)floor($d/60) ; // minimum unit -- minutes   unix/60
27         
28          $this->unit = 0 ;   // is minutes,hour or day?
29         
30          if($d_int < 60){   // minutes   in one hour  3600
31             $this->rustle = $d_int;
32             $this->unit = 1; 
33             }
34            else if($d_int < 720){  //hour    in one day  3600*12
35                  $this->rustle = floor($d_int/60);
36                  $this->unit = 2 ;
37                  }  
38               else if($d_int < 7200){  //day  in ten days  3600*12*10
39                       $this->rustle = floor($d_int/720);
40                       $this->unit = 3 ;
41                       }
42                   else{
43                       $this->rustle = $d ;
44                       $this->unit = 4 ;  
45                       }
46      }
47      public function piece_str($C)
48      {
49           $this->count_int($C);
50             
51           $u = '';
52           switch( $this->unit )
53           {
54              case 1:
55                   $u = 'minute';
56                   break;
57              case 2:
58                   $u = 'hour';
59                   break;
60              case 3:
61                   $u = 'day';
62                   break;
63              case 4:
64                   $u = '';
65                   break;
66              case 0:
67                   return 'sorry , get time is fail';    
68           }
69           if($this->unit < 4)
70           {
71           if($this->rustle > 1)
72                return (string)$this->rustle.$u.'s ago';
73           else if($this->rustle == 1)
74                  return (string)$this->rustle.$u.'ago';
75               else
76                   return 'Just now'; 
77           }
78      }
79      /*  example:   $ago = timeAgo::getObject();
80       *             echo $ago->piece_str($unix);   
81       *             // 2 days ago
82      */
83  }
84 ?>

[!--infotagslink--]

相关文章

  • C#中截取字符串的的基本方法详解

    这篇文章主要介绍了C#中截取字符串的的基本方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-11-03
  • c#中判断字符串是不是数字或字母的方法

    这篇文章介绍了C#判断字符串是否数字或字母的实例,有需要的朋友可以参考一下...2020-06-25
  • PostgreSQL判断字符串是否包含目标字符串的多种方法

    这篇文章主要介绍了PostgreSQL判断字符串是否包含目标字符串的多种方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2021-02-23
  • 详解C++ string常用截取字符串方法

    这篇文章主要介绍了C++ string常用截取字符串方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-04-25
  • php字符串按照单词逐个进行反转的方法

    本文实例讲述了php字符串按照单词进行反转的方法。分享给大家供大家参考。具体分析如下:下面的php代码可以将字符串按照单词进行反转输出,实际上是现将字符串按照空格分隔到数组,然后对数组进行反转输出。...2015-03-15
  • 运行vbs脚本报错无效字符、中文乱码的解决方法(编码问题)

    今天在写一个vbs的时候,发现中文乱码,后来写好代码正常运行的代码压缩一下给了同事,发现报无效字符,经过验证后发现原来是编码的问题导致,这里就为大家分享一下...2020-06-30
  • 使用list stream: 任意对象List拼接字符串

    这篇文章主要介绍了使用list stream:任意对象List拼接字符串操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...2021-09-09
  • MySQL 字符串拆分操作(含分隔符的字符串截取)

    这篇文章主要介绍了MySQL 字符串拆分操作(含分隔符的字符串截取),具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-02-22
  • jQuery实现鼠标滑过链接控制图片的滑动展开与隐藏效果

    本文实例讲述了jQuery实现鼠标滑过链接控制图片的滑动展开与隐藏效果。分享给大家供大家参考,具体如下:这里演示jQuery实现鼠标移动到链接上,滑动展开/隐藏图片效果,鼠标放在“上一页”“下一页”上,立即浮现出所对应的图...2015-10-30
  • C# 16 进制字符串转 int的方法

    这篇文章主要介绍了C# 16 进制字符串转 int的方法,非常不错,具有参考借鉴价值,需要的朋友可以参考下...2020-06-25
  • 获取中文字符串的实际长度代码

    JS中默认中文字符长度和其它字符长度计算方法是一样的,但某些情况下我们需要获取中文字符串的实际长度,代码如下: 复制代码 代码如下: function strLength(str) { var realLength = 0, len = str.length, charCode = -1;...2014-06-07
  • C#实现字符串转换成字节数组的简单实现方法

    这篇文章主要介绍了C#实现字符串转换成字节数组的简单实现方法,仅一行代码即可搞定,非常简单实用,需要的朋友可以参考下...2020-06-25
  • php 中英文混合字符串截取

    文章介绍一个实用的函数,我们如果用php substr来截取字符在中文上处理的很有问题,今天自己写了一个比较好的中文与英文字符截取的函数,有需要的朋友可以参考下。 ...2016-11-25
  • C#实现对字符串进行大小写切换的方法

    这篇文章主要介绍了C#实现对字符串进行大小写切换的方法,涉及C#操作字符串的技巧,具有一定参考借鉴价值,需要的朋友可以参考下...2020-06-25
  • PostgreSQL 字符串处理与日期处理操作

    这篇文章主要介绍了PostgreSQL 字符串处理与日期处理操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-02-01
  • c#将字节数组转成易读的字符串的实现

    这篇文章主要介绍了c#将字节数组转成易读的字符串的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-06-25
  • C#获取字符串后几位数的方法

    这篇文章主要介绍了C#获取字符串后几位数的方法,实例分析了C#操作字符串的技巧,具有一定参考借鉴价值,需要的朋友可以参考下...2020-06-25
  • 解决vue字符串换行问题(绝对管用)

    这篇文章主要介绍了解决vue字符串换行问题(绝对管用),具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-08-06
  • C#判断一个字符串是否是数字或者含有某个数字的方法

    这篇文章主要介绍了C#判断一个字符串是否是数字或者含有某个数字的方法,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下...2020-06-25
  • 【C#基础】Substring截取字符串的方法小结(推荐)

    这篇文章主要介绍了Substring截取字符串方法小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-06-25