Rumah pembangunan bahagian belakang tutorial php php中strpos函数判断字符存在误区_PHP教程

php中strpos函数判断字符存在误区_PHP教程

Jul 13, 2016 am 10:45 AM
php strpos Muncul fungsi penghakiman wujud watak rentetan wujud ya Cari daripada Salah faham pertama

在php中strpos是查找字符串首次出现的位置,如果存在就返回ture或相关具体数字,没有就返回0或false了,但本人要用它做一个wordpress关键词黑名单反垃圾评论时发现一些问题,下面我们来看看。

修改主题comments-ajax.php文件

在主题目录下的comments-ajax.php文件中,大概60行左右的位置(刚取得用户提交的评论表单中的$_POST['author']等字段)。然后在该文件中加上下面的代码:

 代码如下 复制代码

    /*
    * @Author: vfhky 2013年09月21日22:13
    * @Variable string $word: 黑名单中的关键词,用户可自行按规律进行增加或减少
    * @Variable string $comment_author: 用户提交的$_POST['author']字段值,表示昵称
    * @Variable string $comment_content: 用户提交的$_POST['comment']字段值,表示评论内容
    **/
    $words = "com,cn,info,net,www,http,cc,host,代理,移动,电,国,港,器,服,医,肥,药,农,信,贷,日,盈,网,票,域,销,黄,司,企,机,租,人,钱,设,购,播";
    $word = explode(',', $words);
    $num = count($word);
    for($i=0;$i     if (strpos($comment_author,$word[$i],0) || strpos($comment_content,$word[$i],0)){
    err( __('广告必删,多谢理解!') );
    break;
    }
    }

4 后记

通过上面这段简单代码,我们就实现了提交对评论输入的用户昵称、评论内容进行了黑名单中的关键词的校验。一旦匹配到了上面的任何一个词语,例如出现了www,那么就提示用户“广告必删,多谢理解!”,效果如下图所示。这样算是又给博客上了一道保险,增强了wordpress反垃圾评论的免疫力,而且还是非插件的方法实现的哟!

wordpress关键词黑名单:反垃圾评论再升级(非插件)上面看上没问题,但是上午 @坏 童鞋一个邪恶测试,发现了上篇文章代码的BUG。晚上下班回来,仔细看了下代码,发现是自己对strpos函数的片面认识,因此做个笔记Mark一下。

2 strpos函数的原型

相信大家对strpos函数并不陌生,经常在字符串的处理中能看到它的身影。strpos函数原型是:

    /*
    * @Para string $source: 在该字符串中进行查找[*]
    * @Para mixed $target: 要查找的字符串;如若不是字符串,将被转换为整型并被视为字符的顺序值[*]
    * @Para int $offset: 查找的起始位置
    * @Return int/boolean: 成功则返回第一次出现的位置; 失败返回 FALSE 值
    **/
    int strpos(string $source, mixed $target [, int $offset = 0 ]);
    

3 strpos函数的简单测试

了解了strpos函数的原型之后,我们先来看一段简单的测试代码。

  

 代码如下 复制代码
  /*
    * @Author: vfhky 2013年09月21日20:35
    * @Description: 通过两个不同的测试变量$test_1和$test_2直击关键
    **/
        $words = "com,cn,info,net,www,http,cc,host,代理,移动,电,国,港,日,购";
    $word = explode(',', $words);
    $num = count($word);
    $test_1 = "购买TT";
    for($i=0;$i     if (strpos($test_1,$word[$i],0)){
    echo '广告必删,多谢理解!';
    break;
    }
    }
    echo "

----------This is $test_1 END----------

";
    
    $test_2 = "坏坏购买TT";
    for($i=0;$i     if (strpos($test_2,$word[$i],0)){
    echo '广告必删,多谢理解!';
    break;
    }
    }
    echo "

----------This is $test_2 END----------

";
    ?>

测试结果如下图所示:

再议wordpress反垃圾评论:都是strpos函数惹的祸

再议wordpress反垃圾评论:都是strpos函数惹的祸


4 strpos函数的测试结果分析

上面这段代码中有两个不同的测试变量$test_1和$test_2,并且二者都包含了黑名单中的关键词:购。但是从图中显示的测试结果来看,$test_1变量没有别有效屏蔽,而变量$test_2却被提示包含广告词。奥秘就在于变量$test_1和$test_2中的“购”字出现的位置就!当关键词“购”出现在最前面时($test_1),strpos($test_1,$word[$i],0)函数的执行结果为0,因为“购”字在字符串“购买TT”的最前面。那么for循环中的if语句变成了if(0){},从而不会被视为垃圾评论,这就造成了BUG。下面分别是继续用strpos函数和使用PHP正则表达式,两种方法来实现“wordpress关键词黑名单:反垃圾评论再升级”。
5.1 正确使用strpos函数修正BUG

 代码如下 复制代码

    /*
    * @Author: vfhky 2013年09月24日20:06
    * @Description: 正确使用strpos函数,解决上一篇文章代码的BUG
   
    **/
    $words = "com,cn,info,net,www,http,cc,host,代理,移动,电,国,港,器,服,医,肥,药,农,信,贷,日,购,播";
    $word = explode(',', $words);
    $num = count($word);
    for($i=0;$i     if ( (strpos($comment_author,$word[$i],0) !== false) || (strpos($comment_content,$word[$i],0) !== false) ){
    err( __('广告必删,多谢理解!') );
    break;
    }
    }

5.2 使用PHP正则表达式修正BUG

   

 代码如下 复制代码
/*
    * @Author: vfhky 2013年09月24日20:06
    * @Description: 使用PHP正则表达式修正BUG,实现“wordpress关键词黑名单:反垃圾评论再升级(非插件)”
  
    **/
    $words = "com,cn,info,net,www,http,cc,host,代理,移动,电,国,港,器,服,医,肥,药,农,信,贷,日,购,播";
    $word = explode(',', $words);
    $num = count($word);
    for($i=0;$i     if( preg_match("/$word[$i]/i", $comment_author) || preg_match("/$word[$i]/i", $comment_content) ){
    err( __('广告必删,多谢理解!') );
    break;
    }
    }

6 函数strpos的重要提醒

    使用strpos函数还需要注意的一点就是:它可能返回布尔值 FALSE,但也可能返回等同于 FALSE 的非布尔值。
    例如返回整型0,浮点型值0.0,空字符串,字符串 "0",不包括任何元素的数组,不包括任何成员变量的对象,特殊类型NULL等等。
    因此,应使用会检查返回的值的类型的恒等运算符“===”来测试此函数的返回值,而不是使用简单的等号“==”来判别。

7Update 2013.09.26 22:27

经过 @星河大帝 的提醒,可以使用数组来代替字符串,执行效率应该差不多。
7.1 使用strpos函数+数组修正BUG

 代码如下 复制代码

    $words = array("com","cn","info","net","www","http","cc","host","代理","移动","电","国","港","购");
    $num = count($words);
    for($i=0;$i     if (strpos($comment_author,$words[$i],0) !== false || strpos($comment_content,$words[$i],0) !== false){
    err( __('广告必删,多谢理解!') );
    break;
    }
    }

7.2 使用正则式+数组修正BUG

  

 代码如下 复制代码
  $words = array("com","cn","info","net","www","http","cc","host","代理","移动","电","国","港","购");
    $num = count($words);
    for($i=0;$i     if( preg_match("/$words[$i]/i", $comment_author) || preg_match("/$words[$i]/i", $comment_content) ){
    err( __('广告必删,多谢理解!') );
    break;
    }
    }

 

www.bkjia.comtruehttp://www.bkjia.com/PHPjc/633054.htmlTechArticle在php中strpos是查找字符串首次出现的位置,如果存在就返回ture或相关具体数字,没有就返回0或false了,但本人要用它做一个wordpress关键词黑名...
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
2 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Repo: Cara menghidupkan semula rakan sepasukan
1 bulan yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Cara mendapatkan biji gergasi
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Konfigurasi Projek CakePHP Konfigurasi Projek CakePHP Sep 10, 2024 pm 05:25 PM

Dalam bab ini, kita akan memahami Pembolehubah Persekitaran, Konfigurasi Umum, Konfigurasi Pangkalan Data dan Konfigurasi E-mel dalam CakePHP.

Panduan Pemasangan dan Naik Taraf PHP 8.4 untuk Ubuntu dan Debian Panduan Pemasangan dan Naik Taraf PHP 8.4 untuk Ubuntu dan Debian Dec 24, 2024 pm 04:42 PM

PHP 8.4 membawa beberapa ciri baharu, peningkatan keselamatan dan peningkatan prestasi dengan jumlah penamatan dan penyingkiran ciri yang sihat. Panduan ini menerangkan cara memasang PHP 8.4 atau naik taraf kepada PHP 8.4 pada Ubuntu, Debian, atau terbitan mereka

Tarikh dan Masa CakePHP Tarikh dan Masa CakePHP Sep 10, 2024 pm 05:27 PM

Untuk bekerja dengan tarikh dan masa dalam cakephp4, kami akan menggunakan kelas FrozenTime yang tersedia.

Muat naik Fail CakePHP Muat naik Fail CakePHP Sep 10, 2024 pm 05:27 PM

Untuk mengusahakan muat naik fail, kami akan menggunakan pembantu borang. Di sini, adalah contoh untuk muat naik fail.

Penghalaan CakePHP Penghalaan CakePHP Sep 10, 2024 pm 05:25 PM

Dalam bab ini, kita akan mempelajari topik berikut yang berkaitan dengan penghalaan ?

Bincangkan CakePHP Bincangkan CakePHP Sep 10, 2024 pm 05:28 PM

CakePHP ialah rangka kerja sumber terbuka untuk PHP. Ia bertujuan untuk menjadikan pembangunan, penggunaan dan penyelenggaraan aplikasi lebih mudah. CakePHP adalah berdasarkan seni bina seperti MVC yang berkuasa dan mudah difahami. Model, Pandangan dan Pengawal gu

Cara Menyediakan Kod Visual Studio (Kod VS) untuk Pembangunan PHP Cara Menyediakan Kod Visual Studio (Kod VS) untuk Pembangunan PHP Dec 20, 2024 am 11:31 AM

Kod Visual Studio, juga dikenali sebagai Kod VS, ialah editor kod sumber percuma — atau persekitaran pembangunan bersepadu (IDE) — tersedia untuk semua sistem pengendalian utama. Dengan koleksi sambungan yang besar untuk banyak bahasa pengaturcaraan, Kod VS boleh menjadi c

Pengesah Mencipta CakePHP Pengesah Mencipta CakePHP Sep 10, 2024 pm 05:26 PM

Pengesah boleh dibuat dengan menambah dua baris berikut dalam pengawal.

See all articles