PHP移除字符串超链接文本的正则表达式

 更新时间:2016年11月25日 17:26  点击:1364
由于N久之前做了一些非常不好的动作导致网站内容页面有一些垃圾数据,今天早上整了一个移除字符串超链接文本方法,下面我结合正则来处理。

下面实例的功能是过滤所有的html标签,并替换h1-h5之前的所有文字

 代码如下 复制代码

for( $i=1;$i<=5;$i++ )
{

 $sql ="SELECT * FROM `表名` WHERE `字段` like '<h".$i.">%</h".$i.">%' ";
 
 $query = mysql_query( $sql ) or die(mysql_error());
 
 if( mysql_num_rows( $query ) )
 {
  while ( $rs = mysql_fetch_array( $query ) )
  {
   //print_r($rs);
   
   $t = stripslashes($rs['字段']);
   $str = nl2br(strip_tags(addslashes(removelink($t))));
   $sql ="update 表名 set 字段='$str' where id=".$rs['id'];
   
   
   if( mysql_query($sql))
   {
    echo $rs['id'].'成功<br />';
   }
   else
   {
    echo mysql_error();
   } 
  }
 }
 else
 {
  echo '己更新过没有记录了'.$sql.'<br />';
 }

}

 
function removelink($t)
{
 //$str = preg_replace("/<a[^>]*href=[^>]*>|</[^a]*a[^>]*>/i","",$t);
 
 $str = preg_replace("/(?is)(?<=<h1>).*?(?=</h1>)/i","",$t);
 $str = preg_replace("/(?is)(?<=<h2>).*?(?=</h2>)/i","",$str);
 $str = preg_replace("/(?is)(?<=<h3>).*?(?=</h3>)/i","",$str);
 $str = preg_replace("/(?is)(?<=<h4>).*?(?=</h4>)/i","",$str);
 $str = preg_replace("/(?is)(?<=<h5>).*?(?=</h5>)/i","",$str);

 return re_h($str);
}

function re_h($str)
{
 $str = str_replace('<h1>','',$str);
 $str = str_replace('<h2>','',$str);
 $str = str_replace('<h3>','',$str);
 $str = str_replace('<h4>','',$str);
 $str = str_replace('<h5>','',$str);
 $str = str_replace('</h1>','',$str);
 $str = str_replace('</h2>','',$str);
 $str = str_replace('</h3>','',$str);
 $str = str_replace('</h4>','',$str);
 $str = str_replace('</h5>','',$str); 
 return $str;
}

上面用到了下面的正则表达式

 代码如下 复制代码

preg_replace("/(?is)(?<=<h1>).*?(?=</h1>)/i","",$t);

这就是核心代码了


比如需要将文本中的超链接内容去除,这个时候就需要用到正则表达式了。比如你可以用$str = preg_replace("/<a[^>]*href=[^>]*>|</[^a]*a[^>]*>/i","",$strhtml); 这段来实现需求,如果想要更多解决方法,可以参看以下的。

1、删除内容中的超链接

 代码如下 复制代码

ereg_replace('<a([^>]*)>([^<]*)</a>','<font color="red">\2</font>',$content);

ereg_replace("<a [^>]*>|</a>","",$content); 

 
2、消除包含特定词的超链接

 代码如下 复制代码

$find="this string is my find";
$string='<font color="red">替换掉了</font>';//将超链接替换成的内容
echo ereg_replace('<a([^>]*)>([^<]*'.$find.'[^>]*)</a>','<font color="red">\2</font>',$content);

本站原创,转载必须注明来源www.111cn.net 否则后果自负

下面我来给各位同学介绍一个php获取优酷土豆页面中视频swf播放器地址,临时写的不够完善各位朋友可完善与我分享哦。
 代码如下 复制代码


项目用到临时写的。待完善

/*
     * 根据用户提交的(swf/html)地址,获取优酷,土豆的swf播放地址
     * */
    private function _getSwf ($url = '') {
        if(isset($url) && !empty($url)){
            preg_match_all('/http://(.*?)?.(.*?)?.com/(.*)/',$url,$types);
        }else{
            return false;
        }
        $type = $types[2][0];
        $domain = $types[1][0];
        $isswf = strpos($types[3][0], 'v.swf') === false ? false : true;
        $method = substr($types[3][0],0,1);

        switch ($type){
            case 'youku' :
                if( $domain == 'player' ) {
                    $swf = $url;
                }else if( $domain == 'v' ) {
                    preg_match_all('/http://v.youku.com/v_show/id_(.*)?.html/',$url,$url_array);
                    $swf = 'http://player.youku.com/player.php/sid/'.str_replace('/','',$url_array[1][0]).'/v.swf';
                }else{
                    $swf = $url;
                }
                break;
            case 'tudou' :
                if($isswf){
                    $swf = $url;
                }else{
                    $method = $method == 'p' ? 'v' : $method ;
                    preg_match_all('/http://www.tudou.com/(.*)?/(.*)?/',$url,$url_array);
                    $str_arr = explode('/',$url_array[1][0]);
                    $count = count($str_arr);
                    if($count == 1) {
                        $id = explode('.',$url_array[2][0])[0];
                    }else if($count == 2){
                        $id = $str_arr[1];
                    }else if($count == 3){
                        $id = $str_arr[2];
                    }
                    $swf = 'http://www.tudou.com/'.$method.'/'.$id.'/v.swf';
                }
                break;
            default :
                $swf = $url;
                break;
        }
        return $swf;
    }

在php中我给大家介绍两个比较常用的数组过滤函数array_filter与array_unique了,一个是过滤数组空值,一个是过滤数组重复值,我们现在一起来看看。

语法
array_filter(array,function)
参数     描述
array     必需。规定输入的数组。
function     自定义函数的名称,为空时过滤掉所有值为flase的元素

 代码如下 复制代码

<?php
 
function odd($var) {
    return($var & 1);
}
 
function even($var) {
    return(!($var & 1));
}
 
$array1 = array("a"=>1, "b"=>2, "c"=>3, "d"=>4, "e"=>5);
$array2 = array(6, 7, 8, 9, 10, 11, 12);
 
echo "Odd :n";
print_r(array_filter($array1, "odd"));
echo "Even:n";
print_r(array_filter($array2, "even"));
/*
 
Odd :
Array
(
   
[a] => 1
   
[c] => 3
   
[e] => 5
)
Even:
Array
(
   
[0] => 6
   
[2] => 8
   
[4] => 10
   
[6] => 12
)
*/

过滤掉PHP数组中的重复值

去除一个数组中的重复值,可以使用foreach方法,也可以使用array_unique方法,下面的代码两种方法都使用了

 代码如下 复制代码

<?php

$arrF = array();
$arrS = array();
$intTotal = 100;
$intRand = 10;
for($i=0; $i < $intTotal; $i++)
{
 $arrF[] = rand(1, $intRand);
 $arrS[] = rand(1, $intRand);
}
$arrT = array_merge($arrF, $arrS);
$arrRF = array();
$intStart = time();
foreach($arrT as $v)
{
 if(in_array($v, $arrRF))
 {
  continue;
 }
 else
 {
  $arrRF[] = $v;
 }
}
$intEnd = time();
$intTime = $intEnd-$intStart;
echo "With Continue,Spend time:$intTime<br/>";
$intStart1 = time();
$arrRS = array_unique($arrT);
$intEnd2 = time();
$intTime2 = $intEnd2-$intStart1;
echo "With array_unique function,Spend time:($intTime2)";
echo "<pre>";
print_r($arrT);
print_r($arrRF);
print_r($arrRS);
echo "</pre>";

?>


在$intTotal比较小的情况下,比如说1000以内,$intRand的取值基本不影响结果,两者执行的时间都差不多。

测试$intTotal 大于10000时,$intRand取值100时,使用array_unique的效率要高于foreach循环判断,$intRand=10,两者执行时间一致。

因此,可以得出结论,当数组容量不大,大概在1000以内时,使用两者的执行效率差不多。

当数组容量比较大时(具体应该到什么值,我没有详细测试,感兴趣的可以确定一下这个值),随着$intRand的逐渐增大,array_unique的表现更好,我不使用$intTotal/$intRand这个比值,是因为,感觉并不是成比例变化,但是基本会遵循比值越大,array_unique表现越好。

综上所述,在过滤数组重复值的时候,建议使用array_unuique,数组不大的时候两者效率等同,而array_unique使用当然让你的代码一下子减了好几行,数组容量过大时,函数的表现更好


二维数组去重复项函数

 PHP数组去除重复项 有个内置函数array_unique (),但是php的 array_unique函数只适用于一维数组,对多维数组并不适用,以下提供一个二维数组 的 array_unique函数

 代码如下 复制代码

function unique_arr($array2D,$stkeep=false,$ndformat=true)
{
 // 判断是否保留一级数组键 (一级数组键可以为非数字)
 if($stkeep) $stArr = array_keys($array2D);

 // 判断是否保留二级数组键 (所有二级数组键必须相同)
 if($ndformat) $ndArr = array_keys(end($array2D));

 //降维,也可以用implode,将一维数组转换为用逗号连接的字符串
 foreach ($array2D as $v){
  $v = join(",",$v);
  $temp[] = $v;
 }

 //去掉重复的字符串,也就是重复的一维数组
 $temp = array_unique($temp);

 //再将拆开的数组重新组装
 foreach ($temp as $k => $v)
 {
  if($stkeep) $k = $stArr[$k];
  if($ndformat)
  {
   $tempArr = explode(",",$v);
   foreach($tempArr as $ndkey => $ndval) $output[$k][$ndArr[$ndkey]] = $ndval;
  }
  else $output[$k] = explode(",",$v);
 }

 return $output;
}

测试

$array2D = array('first'=>array('title'=>'1111','date'=>'2222'),'second'=>array('title'=>'1111','date'=>'2222'),'third'=>array('title'=>'2222','date'=>'3333'));


print_r($array2D);
print_r(unique_arr($array2D,true));

利用php curl发送json数据与curl post其它数据是一样的,下面我来给大家总结几个关于curl post发送json数据实例,希望能加深各位对curl post json数据的理解吧。

例1

 代码如下 复制代码

$data = array("name" => "Hagrid", "age" => "36");                                                                   
$data_string = json_encode($data);                                                                                  
 
$ch = curl_init('http://api.local/rest/users');                                                                     
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");                                                                    
curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string);                                                                 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);                                                                     
curl_setopt($ch, CURLOPT_HTTPHEADER, array(                                                                         
    'Content-Type: application/json',                                                                               
    'Content-Length: ' . strlen($data_string))                                                                      
);                                                                                                                  
 
$result = curl_exec($ch);

例2

 代码如下 复制代码

   function http_post_data($url, $data_string) {

        $ch = curl_init();
        curl_setopt($ch, CURLOPT_POST, 1);
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string);
        curl_setopt($ch, CURLOPT_HTTPHEADER, array(
            'Content-Type: application/json; charset=utf-8',
            'Content-Length: ' . strlen($data_string))
        );
        ob_start();
        curl_exec($ch);
        $return_content = ob_get_contents();
        ob_end_clean();

        $return_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
        return array($return_code, $return_content);
    }

$url  = "http://xx.xx.cn";
$data = json_encode(array('a'=>1, 'b'=>2));

list($return_code, $return_content) = http_post_data($url, $data);

例3

 代码如下 复制代码

$data=' {
     "button":[
     {   
          "type":"click",
          "name":"今日歌曲",
          "key":"V1001_TODAY_MUSIC"
      },
      {
           "type":"click",
           "name":"歌手简介",
           "key":"V1001_TODAY_SINGER"
      },
      {
           "name":"菜单",
           "sub_button":[
            {
               "type":"click",
               "name":"hello word",
               "key":"V1001_HELLO_WORLD"
            },
            {
               "type":"click",
               "name":"赞一下我们",
               "key":"V1001_GOOD"
            }]
       }]
 }';

$ch = curl_init($urlcon); //请求的URL地址
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);//$data JSON类型字符串
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json', 'Content-Length: ' . strlen($data)));
$data = curl_exec($ch);
print_r($data);//创建成功返回:{"errcode":0,"errmsg":"ok"}

小结,我们发现最核心的一句代码就是Content-Type: application/json;这个是文件格式类型了。

checkbox在html中是以数组形式存储的,如果我们要获取用户选择了我个checkbox值我们可以利用遍历或直接把数组利用implode转换在字符进行存储。

php要求同名表单元素用数组形式命名,并赋予value。否则他不能分解。

例1:利用foreach遍历checkbox

 代码如下 复制代码
<input type=checkbox name="chk[]" value=1>
<input type=checkbox name="chk[]" value=2>
<input type=checkbox name="chk[]" value=3>

提交后,用$_POST['chk']访问。数组中的元素为选中的复选框的值

PHP代码:

 代码如下 复制代码

 <?php
foreach( $_POST["chk"] as $i=>$a )
  { echo $i."==>".$a."<br />"; }
//或者使用$_POST["chk"][0]单独使用
?>

结果:

0=>1
1=>2
2=>3

例2利用explode

 代码如下 复制代码


<table> <form action="index.php" method="post"> <tr> <td> <ol> <li><input type="checkbox" name="lang[]" id="lang" value="1" />中文普通话</li> <li><input type="checkbox" name="lang[]" id="lang" value="11" />日语</li> <li><input type="checkbox" name="lang[]" id="lang" value="10" />朝鲜语</li> <li><input type="checkbox" name="lang[]" id="lang" value="9" />西班牙语</li> <li><input type="checkbox" name="lang[]" id="lang" value="8" />俄语</li> <li><input type="checkbox" name="lang[]" id="lang" value="7" />德语</li> <li><input type="checkbox" name="lang[]" id="lang" value="6" />法语</li> <li><input type="checkbox" name="lang[]" id="lang" value="5" />英语</li> <li><input type="checkbox" name="lang[]" id="lang" value="4" />少数民族语言</li> <li><input type="checkbox" name="lang[]" id="lang" value="3" />中文闽南语</li> <li><input type="checkbox" name="lang[]" id="lang" value="2" />中文粤语</li> <li><input type="checkbox" name="lang[]" id="lang" value="12" />其它国家语言</li> </ol> </td> </tr> <tr> <td> <input name="submit" type="submit" value="submit" /> </td> </tr> </form> </table> <?php $CACHE['lang'] = array( '1'=>'中文普通话', '11'=>'日语', '10'=>'朝鲜语', '9'=>'西班牙语', '8'=>'俄语', '7'=>'德语', '6'=>'法语', '5'=>'英语', '4'=>'少数民族语言', '3'=>'中文闽南语', '2'=>'中文粤语', '12'=>'其它国家语言', ); $lang = $_POST['lang']; if (is_array($lang)){ $cbsports = '<ol>'; foreach ($CACHE['lang'] as $key => $val) { $cbsports .= '<li><input type="checkbox" name="lang[]" id="lang" value="'.$key.'" '.(in_array($key,$lang) ? 'checked="checked"' : '').' />'.$val.'</li>'; } $cbsports .= '</ol>'; echo $cbsports; } else { echo '请勾选后提交'; } ?>

如果需要保存到数据库,按照下面的方式处理后,把$expr的值存储即可。

 代码如下 复制代码

if(!emptyempty($lang)) { $expr = join(",", $lang); }

显示的时候再这样处理后就可以重新生成原来的数组。

 代码如下 复制代码

$lang = explode(',',$row(lang));

备注:使用serialize() 和unserialize() 可以直接存储数组,不过字段要text类型,不太理想。

例3、需要同时删除多项,或同时修改多项记录

要点:

1,前端表单中name要加[],如:<input type="hidden" name="id[]" value="{$vo.id}">
2,后端接受如:$id = $_POST [id] [$i];     $i为for中的循环变量,当$i相同时可以使得$_POST [id] [$i]和$_POST [name] [$i]为一一对应;

一,前端表单:
 

 代码如下 复制代码

 

<form name="form1" method="post" action="__GROUP__/Repair/updateList">
  对所选操作:<input type="submit" value="保 存" class="btn btn-primary"> <br>
            <table id="checkList" class="list table table-hover">
                <tr>
                    <th scope="col"><input id="check" type="checkbox"
                        onclick="checkAll()" /> 全选</th>
                    <th scope="col">主题</th>
                    <th scope="col">校区</th>
                    <th scope="col">房间</th>
                    <th scope="col">报修人</th>
                    <th scope="col">联系电话</th>
                    <th scope="col">报修时间</th>
                    <th scope="col">审核</th>
                    <th scope="col">报修状态</th>
                </tr>
                <volist name="list" id="vo">
                <tr>
                    <td><input type="checkbox" name="key" value="{$vo.id}">{$vo.id}<input type="hidden" name="id[]" value="{$vo.id}"></td>
                    <td>{$vo.topic}</td>
                    <td>{$vo.xiaoqu}</td>
                    <td>{$vo.room}</td>
                    <td>{$vo.pname}</td>
                    <td>{$vo.phone}</td>
                    <td>{$vo.create_time|date='Y-m-d H:i:s',###}</td>
                    <td><select name="check[]"><switch name="vo.check">
                            <case value="0">
                            <option value="0" selected="selected">未审核</option>
                            <option value="1">审核</option>
                            </case> <default />
                            <option value="0">未审核</option>
                            <option value="1" selected="selected">审核</option>
                            </switch></select></td>
                    <td><select name="status[]"><switch name="vo.status">
                            <case value="已修">
                            <option value="未修">未修</option>
                            <option value="任务已下">任务已下</option>
                            <option value="已修" selected="selected">已修</option>
                            </case> <case value="任务已下">
                            <option value="未修">未修</option>
                            <option value="任务已下" selected="selected">任务已下</option>
                            <option value="已修">已修</option>
                            </case> <default />
                            <option value="未修" selected="selected">未修</option>
                            <option value="任务已下">任务已下</option>
                            <option value="已修">已修</option>
                            </switch></select></td>
                </tr>
                </volist>
            </table>
        </form>


二,服务端处理代码
 

 代码如下 复制代码

 

<?php
/**
     * 批量修改状态
     */
    public function updateList() {
        $result = false;
        for($i = 0; $i < count ( $_POST [id] ); $i ++) {
           
            $id = $_POST [id] [$i];
            $check = $_POST [check] [$i];
            $status = $_POST [status] [$i];
           
            // 保存登录信息
            $Repair = M ( 'Repair' );
            $data ['id'] = $id;
            $data ['check'] = $check;
            $data ['status'] = $status;
            $result = $Repair->save ( $data );
        }
       
        if (false !== $result) {
            $this->success ( '修改成功!' );
        } else {
            $this->error ( '修改失败!' );
        }
    }

[!--infotagslink--]

相关文章

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

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

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

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

    这篇文章主要介绍了C++ string常用截取字符串方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-04-25
  • PHP正则表达式取双引号内的内容

    取双引号内的内容我们如果一个字符串中只有一个可以使用explode来获得,但如果有多个需要使用正则表达式来提取了,具体的例子如下。 写程序的时候总结一点经验,如何只...2016-11-25
  • php字符串按照单词逐个进行反转的方法

    本文实例讲述了php字符串按照单词进行反转的方法。分享给大家供大家参考。具体分析如下:下面的php代码可以将字符串按照单词进行反转输出,实际上是现将字符串按照空格分隔到数组,然后对数组进行反转输出。...2015-03-15
  • MySQL 字符串拆分操作(含分隔符的字符串截取)

    这篇文章主要介绍了MySQL 字符串拆分操作(含分隔符的字符串截取),具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-02-22
  • C#实现字符串转换成字节数组的简单实现方法

    这篇文章主要介绍了C#实现字符串转换成字节数组的简单实现方法,仅一行代码即可搞定,非常简单实用,需要的朋友可以参考下...2020-06-25
  • 使用list stream: 任意对象List拼接字符串

    这篇文章主要介绍了使用list stream:任意对象List拼接字符串操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...2021-09-09
  • C# 16 进制字符串转 int的方法

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

    JS中默认中文字符长度和其它字符长度计算方法是一样的,但某些情况下我们需要获取中文字符串的实际长度,代码如下: 复制代码 代码如下: function strLength(str) { var realLength = 0, len = str.length, charCode = -1;...2014-06-07
  • PostgreSQL 字符串处理与日期处理操作

    这篇文章主要介绍了PostgreSQL 字符串处理与日期处理操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-02-01
  • PHP正则表达式之捕获组与非捕获组

    今天遇到一个正则匹配的问题,忽然翻到有捕获组的概念,手册上也是一略而过,百度时无意翻到C#和Java中有对正则捕获组的特殊用法,搜索关键词有PHP时竟然没有相关内容,自己试了一下,发现在PHP中也是可行的,于是总结一下,分享的同...2015-11-08
  • php 中英文混合字符串截取

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

    这篇文章主要介绍了C#实现对字符串进行大小写切换的方法,涉及C#操作字符串的技巧,具有一定参考借鉴价值,需要的朋友可以参考下...2020-06-25
  • php 验证只能输入汉字、英语、数字的正则表达式

    正则表达式是一门非常有用的并且进行模糊判断的一个功能了,我们下面来看通过正则来验证输入汉字、英语、数字,具体如下。 收藏了正则表达式。可以验证只能输入数...2016-11-25
  • java正则表达式判断前端参数修改表中另一个字段的值

    这篇文章主要介绍了java正则表达式判断前端参数修改表中另一个字段的值,需要的朋友可以参考下...2021-05-07
  • c#将字节数组转成易读的字符串的实现

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

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

    这篇文章主要介绍了解决vue字符串换行问题(绝对管用),具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-08-06