php 正则替换掉网页中所有超链接 过滤网页中所有Url

 更新时间:2016年11月25日 15:45  点击:1708
在php中我们经常会需要把字符串中的超级链接地址与url给过滤掉,下面我来利用php正则功能实现替换掉网页中所有超链接与url实例,各位朋友可参考。

正则替换掉网页中所有超链接

 代码如下 复制代码

<?php
$content = file_get_contents('test.html');
$url = 'http://www.111cn.net';  //要换成的新网址
$preg = '/[s]href=("|')[S]*("|')/i';
$replace = ' href="' . $url . '"';
$content = preg_replace($preg, $replace, $content);  //正则替换
create_log('newhtml', $content);  //生成新文件
?>

下面是写文件操作

 代码如下 复制代码

function create_log($filename, $text) {
       if ( strtolower(substr($filename, -4)) != 'html' ){
              $filename .= '.html';
       }
       $filename = dirname ( __FILE__ ) . '/' . $filename;
       if (!file_exists ( $filename )) {
              exec( 'touch '. $filename);
              exec( 'chmod 777 '. $filename);
       }
       $handle = fopen ( $filename, "w+b" );
       $text .= "rn";
       fwrite($handle, $text);
       fclose ( $handle );
}

下面我一个采集的功能

 代码如下 复制代码

$url ='http://www.111cn.net';
$body=@file_get_contents($url);
preg_match_all('/href=['"]?([^'"]*)['"]?>(.*)/i',$body,$b);
$nums = array();
foreach($b[1] as $u){
  if(in_array($u,$nums)){
  continue;
  }
  $nums[]=$u;
  $title=strip_tags($u);
  echo $title."</br>";
}

今天给大家转一个不错的数组平均值算法函数,这个主要是针对二维数据值的算法,各位有需要了朋友可参考。

计算数组平均值 二维数组平均值计算 分组计算平均值

 代码如下 复制代码

$array = array(
    array('class' => 'a', 'value' => 3),
    array('class' => 'a', 'value' => 4),
    array('class' => 'b', 'value' => 5),
    array('class' => 'b', 'value' => 6)
)

这样的数组可分别以 class键值分组计算平均值
也可以单独计算总的平均值,用法如下

 代码如下 复制代码

array_avg($array, 'class');//返回二维数组
array_avg($array);//返回一维数组
// 计算平均值    返回一维数组
// 参数$avgby 按照指定字段算平均值  返回二维数组
private function array_avg($array, $avgby = NULL) {
    $array_avg = array ();
    $number = count ( $array );
    foreach ( $array as $key => $value ) {
        if ($avgby) {
            $avg_key = $value[$avgby];
            $array_avg[$avg_key]['count'] ++;
            foreach ( $value as $k => $v ) {
                $array_avg[$avg_key][$k] += $v;
            }
        } else {
            foreach ( $value as $k => $v ) {
                $array_avg[$k] += $v;
            }
        }
    }
    $array = array ();
    foreach ( $array_avg as $key => $value ) {
        if ($avgby) {
            foreach ( $value as $k => $v ) {
                $array[$key][$k] = $v / $value['count'];
            }
        } else {
            $array[$key] = $value / $number;
        }
    }
    return $array;
}

在jquery中的ajax请求方法有很多,可是$.ajax, $.get, or $.post,并且他可以是json,html,txt等格式,这样我们需要在php根据ajax发送过来的HTTP_X_REQUESTED_WITH是否为ajax请求,然后再根据$_SERVER[\'HTTP_ACCEPT\']检判断是那格式的请求。


php中就是在header一层判断是否是ajax请求,对应的根据$_SERVER['HTTP_X_REQUESTED_WITH']判断。

 代码如下 复制代码

/**
  * 当前请求是否ajax请求
  *
  * @access public
  * @return bool
  */
 function isAjax()
 {
     return isset($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'XMLHttpRequest';
 }

一般情况下$_SERVER['HTTP_X_REQUESTED_WITH']默认是XMLHttpRequest


ajax跨域只能指定jsonp格式的数据,这个是就不是XMLHttpRequest对象了,就算你自定义一个$_SERVER['HTTP_X_REQUESTED_WITH']也是没有意义的

解决的办法:
针对跨域情况的getjson 或者ajax(jsonp)可以使用ACCEPT请求头部格式来判断

PHP端对应$_SERVER['HTTP_ACCEPT']

jsonp的请求一般是:text/javascript, application/javascript, */*

json的请求:application/json, text/javascript, */*

一个简单的判断跨域条件下的ajax请求:

 代码如下 复制代码

switch ($_SERVER['HTTP_ACCEPT']){ 
    case 'application/json, text/javascript, */*': 
        //  JSON 格式 
        break; 
    case 'text/javascript, application/javascript, */*': 
        // javascript 或 JSONP 格式 
        break; 
    case 'text/html, */*': 
        //  HTML 格式 
        break; 
    case 'application/xml, text/xml, */*': 
        //  XML 格式 
        break; 
}

在php中页面跳转我们用到的是header函数了,如果要定时跳转页面我们就必须使用js或html了,下面我来给各位同学总结一下各种页面跳转的实现程序。

header()函数

header()函数是PHP中进行页面跳转的一种十分简单的方法。header()函数的主要功能是将HTTP协议标头(header)输出到浏览器。

header()函数的定义如下:

void header (string string [,bool replace [,int http_response_code]])

可选参数replace指明是替换前一条类似标头还是添加一条相同类型的标头,默认为替换。

第二个可选参数http_response_code强制将HTTP相应代码设为指定值。 header函数中Location类型的标头是一种特殊的header调用,常用来实现页面跳转。注意:1.location和“:”号间不能有空格,否则不会跳转。


1.使用php里head函数进行跳转


注意:head跳转前不要有任何输出,不然可能不能跳转.

 代码如下 复制代码

header("refresh:3;url=http://www.111cn.net");//限时跳转
header('location:http://www.111cn.net');//立即跳转


2. HTML meta refresh 刷新与跳转(重定向)页面

Meta标签

Meta标签是HTML中负责提供文档元信息的标签,在PHP程序中使用该标签,也可以实现页面跳转。 若定义http-equiv为refresh,则打开该页面时将根据content规定的值在一定时间内跳转到相应页面。


refresh 属性值 — 刷新与跳转(重定向)页面

refresh用于刷新与跳转(重定向)页面

refresh出现在http-equiv属性中,使用content属性表示刷新或跳转的开始时间与跳转的网址

 代码如下 复制代码

<meta http-equiv="refresh" content="3; url=http://www.111cn.net">


3.js实现页面跳转

js实现跳转主要用到location对象

 代码如下 复制代码

<script type='text/javascript'>
 // 立即跳转
 window.location.href = 'http://www.111cn.net';
 // 限时跳转
 setTimeout(function(){
  // 3秒后跳转
  window.location.href = 'http://www.111cn.net';
 },3000);
</script>

在php中如果我们要获取汉字的拼音第一个字母我们先要了解asc码的范围码了,我们只要知道这个值上下限就可以使用php中的ord来获取我相关的汉字拼音了。

实例1

 代码如下 复制代码

function getFirstCharter($str) {
    if (empty($str)) {return '';}
    $fchar = ord($str{0});
    if ($fchar>=ord('A') && $fchar<=ord('z')) return strtoupper($str{0});
    $s1 = iconv('UTF-8', 'gb2312', $str);
    $s2 = iconv('gb2312', 'UTF-8', $s1);
    $s = $s2 == $str ? $s1 : $str;
    $asc = ord($s{0})*256 + ord($s{1}) - 65536;
    if ($asc>=-20319 && $asc<=-20284) return 'A';
    if ($asc>=-20283 && $asc<=-19776) return 'B';
    if ($asc>=-19775 && $asc<=-19219) return 'C';
    if ($asc>=-19218 && $asc<=-18711) return 'D';
    if ($asc>=-18710 && $asc<=-18527) return 'E';
    if ($asc>=-18526 && $asc<=-18240) return 'F';
    if ($asc>=-18239 && $asc<=-17923) return 'G';
    if ($asc>=-17922 && $asc<=-17418) return 'H';
    if ($asc>=-17417 && $asc<=-16475) return 'J';
    if ($asc>=-16474 && $asc<=-16213) return 'K';
    if ($asc>=-16212 && $asc<=-15641) return 'L';
    if ($asc>=-15640 && $asc<=-15166) return 'M';
    if ($asc>=-15165 && $asc<=-14923) return 'N';
    if ($asc>=-14922 && $asc<=-14915) return 'O';
    if ($asc>=-14914 && $asc<=-14631) return 'P';
    if ($asc>=-14630 && $asc<=-14150) return 'Q';
    if ($asc>=-14149 && $asc<=-14091) return 'R';
    if ($asc>=-14090 && $asc<=-13319) return 'S';
    if ($asc>=-13318 && $asc<=-12839) return 'T';
    if ($asc>=-12838 && $asc<=-12557) return 'W';
    if ($asc>=-12556 && $asc<=-11848) return 'X';
    if ($asc>=-11847 && $asc<=-11056) return 'Y';
    if ($asc>=-11055 && $asc<=-10247) return 'Z';
    return null;

例如:
 

echo getFirstCharter("程序员3aj.cn"); // 结果将输出:C


实例二

 代码如下 复制代码
<?php
 
$limit=array( //gb2312 拼音排序
    array(45217,45252), //A
    array(45253,45760), //B
    array(45761,46317), //C
    array(46318,46825), //D
    array(46826,47009), //E
    array(47010,47296), //F
    array(47297,47613), //G
    array(47614,48118), //H
    array(0,0),         //I
    array(48119,49061), //J
    array(49062,49323), //K
    array(49324,49895), //L
    array(49896,50370), //M
    array(50371,50613), //N
    array(50614,50621), //O
    array(50622,50905), //P
    array(50906,51386), //Q
    array(51387,51445), //R
    array(51446,52217), //S
    array(52218,52697), //T
    array(0,0),         //U
    array(0,0),         //V
    array(52698,52979), //W
    array(52980,53688), //X
    array(53689,54480), //Y
    array(54481,55289), //Z
);
 
$str="A:这是一个测试程序1";
$str= iconv("UTF-8","gb2312", $str);
echo $str."</br>";
$i=0;
while($i<strlen($str) ) {
    $tmp=bin2hex(substr($str,$i,1));
    if($tmp>='B0'){ //汉字的开始
        $t=getLetter(hexdec(bin2hex(substr($str,$i,2))));
        printf("%c",$t==-1 ? '*' : $t );
        $i+=2;
    }
    else{
        printf("%s",substr($str,$i,1));
        $i++;
    }
}
 
function getLetter($num){
    global $limit;
    $char_index=65;
    foreach($limit as $k=>$v){
        if($num>=$v[0] && $num<=$v[1]){
            $char_index+=$k;
            return $char_index;
        }
    }
    return -1;
}
?>
[!--infotagslink--]

相关文章

  • php批量替换内容或指定目录下所有文件内容

    要替换字符串中的内容我们只要利用php相关函数,如strstr,str_replace,正则表达式了,那么我们要替换目录所有文件的内容就需要先遍历目录再打开文件再利用上面讲的函数替...2016-11-25
  • jQuery实现鼠标滑过链接控制图片的滑动展开与隐藏效果

    本文实例讲述了jQuery实现鼠标滑过链接控制图片的滑动展开与隐藏效果。分享给大家供大家参考,具体如下:这里演示jQuery实现鼠标移动到链接上,滑动展开/隐藏图片效果,鼠标放在“上一页”“下一页”上,立即浮现出所对应的图...2015-10-30
  • 一个关于JS正则匹配的踩坑记录

    这篇文章主要给大家介绍了一个关于JS正则匹配的踩坑记录,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-04-13
  • jQuery实现滑动页面固定顶部显示(可根据显示位置消失与替换)

    本文实例讲述了jQuery实现滑动页面固定顶部显示(可根据显示位置消失与替换)。分享给大家供大家参考,具体如下:这里介绍的jQuery拉动页面固定顶部显示,及自动消失效果,可能ie浏览器下有问题,不过火狐什么的都可以运行看效果...2015-10-30
  • 如何获取百度搜索结果页中解密之后的真实链接

    大家用百度搜索的时候,可能会发现,结果链接用的还是百度的链接,点击之后才会跳转到另外一个页面,另外一个页面的真实链接如何获取到呢?? 通过分析发现: 可以看出,返回...2016-05-19
  • 用golang如何替换某个文件中的字符串

    这篇文章主要介绍了用golang实现替换某个文件中的字符串操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-04-25
  • Idea使用正则表达式批量替换字符串的方法

    这篇文章给大家介绍了Idea使用正则表达式批量替换字符串的方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧...2021-07-21
  • js正则学习小记之匹配字符串字面量

    关于匹配字符串问题,有很多种类型,今天讨论 js 代码里的字符串匹配,因为我想学完之后写个语法高亮练手,所以用js代码当作例子...2021-05-07
  • js 正则学习小记之匹配字符串字面量优化篇

    昨天在《js 正则学习小记之匹配字符串字面量》谈到 /"(?:\\.|[^"])*"/ 是个不错的表达式,因为可以满足我们的要求,所以这个表达式可用,但不一定是最好的...2021-05-07
  • C#使用正则表达式过滤html标签

    最近在开发一个项目,其中有需求要求我们把一段html转换为一般文本返回,使用正则表达式是明智的选择,下面小编给介绍下C#使用正则表达式过滤html标签,需要的朋友参考下...2020-06-25
  • JS基于正则截取替换特定字符之间字符串操作示例

    这篇文章主要介绍了JS基于正则截取替换特定字符之间字符串操作方法,结合具体实例形式分析了JS基于正则实现针对特殊字符、数字等字符串类型的截取操作相关技巧,需要的朋友可以参考下...2017-02-08
  • ASP.NET中iframe框架点击左边页面链接 右边显示链接页面内容

    这篇文章主要介绍了ASP.NET中iframe框架点击左边页面链接,右边显示链接页面内容的实现代码,感兴趣的小伙伴们可以参考一下...2021-09-22
  • OpenResty中正则模式匹配的2种方法详解

    在 OpenResty 中,同时存在两套正则表达式规范:Lua 语言的规范和 Nginx 的规范,下面这篇文章主要给大家介绍了关于OpenResty中正则模式匹配的2种方法,文中通过示例代码介绍的非常详细,需要的朋友可以参考下。...2020-06-30
  • 浅谈JS正则RegExp对象

    这篇文章主要介绍JS正则RegExp对象,正则表达式是描述字符模式的对象,用于对字符串模式匹配及检索替换,是对字符串执行模式匹配的强大工具。下面就来看具体详情,需要的朋友可以参考一下...2021-10-21
  • Opencv实现绿幕视频背景替换功能

    这篇文章主要为大家详细介绍了Opencv实现绿幕视频背景替换功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2020-04-25
  • python docx的超链接网址和链接文本操作

    这篇文章主要介绍了python docx的超链接网址和链接文本操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-03-06
  • jQuery实现滑动页面固定顶部显示(可根据显示位置消失与替换)

    本文实例讲述了jQuery实现滑动页面固定顶部显示(可根据显示位置消失与替换)。分享给大家供大家参考,具体如下:这里介绍的jQuery拉动页面固定顶部显示,及自动消失效果,可能ie浏览器下有问题,不过火狐什么的都可以运行看效果...2015-10-30
  • 字符串替换Replace仅替换第一个字符串匹配项

    C#里面的String.Replace(string,string)方法替换的时候是替换所有的匹配项,我们需要只替换第一个匹配项,写一个方法来实现这个功能...2020-06-25
  • 浅谈js正则之test方法bug篇

    其实我很少用这个,所以之前一直没注意这个问题,自从落叶那厮写了个变态的测试我才去看了下这东西...2021-05-07
  • Python 实现自动获取种子磁力链接方式

    今天小编就为大家分享一篇Python 实现自动获取种子磁力链接方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-04-27