Jadual Kandungan
回复讨论(解决方案)
Rumah pembangunan bahagian belakang tutorial php 留言板内容不文明词语过滤的问题

留言板内容不文明词语过滤的问题

Jun 23, 2016 pm 01:55 PM
kandungan papan mesej penapis

如题。

现在不文明词语是个数组,在留言板内容后,我需要用这个不文明词语数组里面逐个查找留言板内容中是否有匹配的。如果有则提示。在纠结着怎么样才能实现这个不文明词语过滤的效果


回复讨论(解决方案)

首先得有一个脏词包(数据库,或者数组形式)。然后循环正则替换。

function filterWd($content){    $fn = "common/filterword.txt";    $fd = fopen($fn, "rb");    if(file_exists($fn)){        $fw = array();        while(!feof($fd)){            $fw[] = fgets($fd);        }        for($i = 0; $i < count($fw); $i++){            $srs = stripos($content, $fw[$i]);            if($srs = false){                echo "error";            }else{                echo "您输入的内容包含不文明用语'$fw[$i]',请重新输入";                break;            }        }    }else{        echo null;    }}filterWd("你妹的找死啊");
Salin selepas log masuk


比如 filterword.txt 里面有 不文明、你妹、找死 三个词语 “echo "您输入的内容包含不文明用语'$fw[$i]',请重新输入";” 这行输出的永远是 不文明 这个单词啊,这个怎么判断?

12行的 if($srs = false){
改为 if($srs == false){

12行的 if($srs = false){
改为 if($srs == false){



嗯,我改过来了还是觉得不行。但是我后面改了一下要过滤的词语后就能找出来了,现在问题又来了,为什么有些词语明明是有的就是没检测出来。如

function filterWd($content){		$fw = array("不文明", "去你的");		for($i = 0; $i < count($fw); $i++){			$srs = stripos($content, $fw[$i]);			if($srs == false){				echo "error 第" . $i . "次<br />";			}else{				echo "您输入的内容包含不文明用语'$fw[$i]',请重新输入";				break;			}		}	}filterWd("不文明啊去你的");输出:error 第0次您输入的内容包含不文明用语'去你的',请重新输入//为什么不首先检测到“不文明”呢?
Salin selepas log masuk

你不是在找到第一个就不再找(break)了吗?

第一个 “不文明” 不等于 false 输出:您输入的内容包含不文明用语'去你的',请重新输入。然后再断开
不应该是这样的吗?怎么会跳到第二个“去你的”去断开

出现的次序是由你的字典顺序决定的
如果你用 trie 算法(精华区有)的话,才能按输入文字的次序检查

不是很理解 , 刚接触不久

你的算法是遍历字典,逐个查看字典字是否出现在正文中
也就是字典有多大,就要检查多少遍

而 trie 算法是:逐字扫描正文,检查由字组成的次是否出现在字典中
只需扫描一遍正文,就可找到所有存在的字典字

经你这么,有点似懂非懂。我换了个 strstr() 就解决了这个问题, strstr() 应该就是全文检索

unction filterWd($content){		$fw = array("天堂", "地狱", "找死", "你妹的", "不文明");		for($i = 0; $i < count($fw); $i++){			$srs = stristr($content, $fw[$i]);			if($srs == false){				echo "error";			}else{				echo "您输入的内容包含不文明用语'$fw[$i]',请重新输入";				break;			}		}	}filterWd("不文明啊去你的天堂找死");输出:您输入的内容包含不文明用语'天堂',请重新输入//不管我数组里面怎么打乱次序,数组中第一个 “天堂” 首先在正文中被检索到
Salin selepas log masuk

如果只是用单个字符串去检索正文用 strpos() 效率应该会更快些

关键是我现在是数组去检索正文 还得判断从数组中取出的是不是匹配 这个有点难理解

if($srs === false){
echo "error 第" . $i . "次
";
}else{
echo "您输入的内容包含不文明用语'$fw[$i]',请重新输入";
break;
}

//楼主该好好看手册了。

if($srs === false){
echo "error 第" . $i . "次
";
}else{
echo "您输入的内容包含不文明用语'$fw[$i]',请重新输入";
break;
}

//楼主该好好看手册了。



有一个我真的不明白,读取文件得来的 存到数组里面
运行到这步
(在下面这行代码之前我运行过 echo $fw[0....9])都是有结果的)
$srs = stristr($content, $fw[$i]); //到这行就是 false 了

返回值永为 false ;

实在让人费解

用var_dump();分别输出一下两个值看看。

var_dump() 也度过了, 只要是过了 $srs = stristr($content, $fw[$i]); 输出的全都是 false

function filterWd($content){        $fw = array("天堂", "地狱", "找死", "你妹的", "不文明");        for($i = 0; $i < count($fw); $i++){            $srs = stristr($content, $fw[$i]);            if($srs !== false){                echo "您输入的内容包含不文明用语'$fw[$i]',请重新输入<br>";                //break;            }        }    }filterWd("不文明啊去你的天堂找死");
Salin selepas log masuk
Salin selepas log masuk
您输入的内容包含不文明用语'天堂',请重新输入
您输入的内容包含不文明用语'找死',请重新输入
您输入的内容包含不文明用语'不文明',请重新输入

之前写了个php替换敏感字符的类,有白名单和黑名单。
黑名单的会替换为*。

可以参考一下: http://blog.csdn.net/fdipzone/article/details/8486985

function filterWd($content){        $fw = array("天堂", "地狱", "找死", "你妹的", "不文明");        for($i = 0; $i < count($fw); $i++){            $srs = stristr($content, $fw[$i]);            if($srs !== false){                echo "您输入的内容包含不文明用语'$fw[$i]',请重新输入<br>";                //break;            }        }    }filterWd("不文明啊去你的天堂找死");
Salin selepas log masuk
Salin selepas log masuk
您输入的内容包含不文明用语'天堂',请重新输入
您输入的内容包含不文明用语'找死',请重新输入
您输入的内容包含不文明用语'不文明',请重新输入


我知道这样是可以。如果数组是读取文件得来的就不行

你读文件时没有去掉换行符

$fn = "common/filterword.txt";$fd = fopen($fn, "rb");if(file_exists($fn)){   $fw = array();   while(!feof($fd)){     $fw[] = trim(fgets($fd));   }}print_r($fw);
Salin selepas log masuk

干脆这样
$fn = "common/filterword.txt";$fw = file($fn, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);print_r($fw);
Salin selepas log masuk

过滤的话...可不可以不提示直接和谐后发布?

echo str_replace($脏话数组, , $content);


还真的是这样,去掉  空格  换行符   就可以了 

$fw[] = trim(fgets($fn));  

然后再检索   strstr($content,$fw[$i]);   

这样就可以了

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)
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
3 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)

Cara mendayakan Amaran Kandungan Sensitif pada iPhone dan ketahui ciri-cirinya Cara mendayakan Amaran Kandungan Sensitif pada iPhone dan ketahui ciri-cirinya Sep 22, 2023 pm 12:41 PM

Terutamanya sepanjang dekad yang lalu, peranti mudah alih telah menjadi cara utama untuk berkongsi kandungan dengan rakan dan keluarga. Antara muka yang mudah diakses, mudah digunakan dan keupayaan untuk menangkap imej dan video dalam masa nyata menjadikannya pilihan yang bagus untuk mencipta dan berkongsi kandungan. Walau bagaimanapun, adalah mudah bagi pengguna yang berniat jahat untuk menyalahgunakan alatan ini untuk memajukan kandungan sensitif yang tidak diingini yang mungkin tidak sesuai untuk dilihat dan tidak memerlukan persetujuan anda. Untuk mengelakkan perkara ini berlaku, ciri baharu dengan "Amaran Kandungan Sensitif" telah diperkenalkan dalam iOS17. Mari lihat dan cara menggunakannya pada iPhone anda. Apakah Amaran Kandungan Sensitif baharu dan bagaimana ia berfungsi? Seperti yang dinyatakan di atas, Amaran Kandungan Sensitif ialah ciri privasi dan keselamatan baharu yang direka untuk membantu menghalang pengguna daripada melihat kandungan sensitif, termasuk iPhone

Bagaimana untuk menukar pelayar Microsoft Edge untuk dibuka dengan navigasi 360 - Bagaimana untuk menukar pembukaan dengan navigasi 360 Bagaimana untuk menukar pelayar Microsoft Edge untuk dibuka dengan navigasi 360 - Bagaimana untuk menukar pembukaan dengan navigasi 360 Mar 04, 2024 pm 01:50 PM

Bagaimana untuk menukar halaman yang membuka pelayar Microsoft Edge kepada navigasi 360 Ia sebenarnya sangat mudah, jadi sekarang saya akan berkongsi dengan anda kaedah menukar halaman yang membuka pelayar Microsoft Edge kepada 360 navigasi Rakan-rakan yang memerlukan lihat. Saya harap dapat membantu semua orang. Buka penyemak imbas Microsoft Edge. Kami melihat halaman seperti di bawah. Klik pada ikon tiga titik di sudut kanan atas. Klik "Tetapan." Klik "Pada permulaan" dalam lajur kiri halaman tetapan. Klik pada tiga titik yang ditunjukkan dalam gambar di lajur kanan (jangan klik "Buka Tab Baharu"), kemudian klik Edit dan tukar URL kepada "0" (atau nombor lain yang tidak bermakna). Kemudian klik "Simpan". Seterusnya, pilih "

Bagaimana untuk membuka fail pendua yang ditapis dalam Quark Bagaimana untuk membuka fail pendua yang ditapis dalam Quark Mar 01, 2024 am 11:25 AM

Apabila menggunakan Quark Browser, terdapat fungsi untuk menapis fail pendua Beberapa rakan tidak begitu biasa dengan ini. 1. Mula-mula, klik "Pelayar Quark" pada telefon bimbit anda untuk memasuki antara muka, kemudian klik dan pilih "Cakera Rangkaian Quark" dalam pilihan di tengah halaman untuk dibuka dan masuk. 2. Cari "Tetapan Sandaran" di bahagian bawah antara muka cakera rangkaian Quark, dan klik untuk membukanya, seperti yang ditunjukkan dalam rajah di bawah: 3. Seterusnya, pada halaman yang anda masukkan, terdapat "Filter Duplicate Files", yang dipaparkan di belakangnya Terdapat butang suis Klik gelangsar bulat padanya dan tetapkannya kepada warna untuk menghidupkan fungsi ini Apabila anda terus membuat sandaran fail, fail pendua akan dilangkau untuk menjimatkan kapasiti cakera rangkaian.

Bagaimana untuk menggunakan fungsi PHP untuk mencari dan menapis data? Bagaimana untuk menggunakan fungsi PHP untuk mencari dan menapis data? Jul 24, 2023 am 08:01 AM

Bagaimana untuk menggunakan fungsi PHP untuk mencari dan menapis data? Dalam proses pembangunan menggunakan PHP, selalunya perlu untuk mencari dan menapis data. PHP menyediakan pelbagai fungsi dan kaedah untuk membantu kami mencapai operasi ini. Artikel ini akan memperkenalkan beberapa fungsi dan teknik PHP yang biasa digunakan untuk membantu anda mencari dan menapis data dengan cekap. Carian rentetan Fungsi carian rentetan yang biasa digunakan dalam PHP ialah strpos() dan strstr(). strpos() digunakan untuk mencari kedudukan subrentetan tertentu dalam rentetan Jika wujud, ia akan kembali

Python melaksanakan penapisan dan penapisan data XML Python melaksanakan penapisan dan penapisan data XML Aug 09, 2023 am 10:13 AM

Python melaksanakan penapisan dan penapisan data XML (eXtensibleMarkupLanguage) ialah bahasa penanda yang digunakan untuk menyimpan dan menghantar data Ia fleksibel dan berskala dan sering digunakan untuk pertukaran data antara sistem yang berbeza. Apabila memproses data XML, kami selalunya perlu menapis dan menapisnya untuk mengekstrak maklumat yang kami perlukan. Artikel ini akan memperkenalkan cara menggunakan Python untuk menapis dan menapis data XML. Import modul yang diperlukan Sebelum memulakan, kami

PHP dan PHPMAILER: Bagaimana untuk melaksanakan penapisan automatik penghantaran mel? PHP dan PHPMAILER: Bagaimana untuk melaksanakan penapisan automatik penghantaran mel? Jul 21, 2023 am 09:25 AM

PHP dan PHPMAILER: Bagaimana untuk melaksanakan penapisan automatik penghantaran mel? Dalam masyarakat moden, e-mel telah menjadi salah satu cara penting untuk orang berkomunikasi. Walau bagaimanapun, dengan populariti dan penggunaan e-mel yang meluas, jumlah spam juga telah menunjukkan trend pertumbuhan yang meletup. E-mel spam bukan sahaja membuang masa dan sumber rangkaian pengguna, tetapi juga boleh membawa virus dan tingkah laku pancingan data. Oleh itu, apabila membangunkan fungsi penghantaran e-mel, ia menjadi penting untuk menambah fungsi menapis spam secara automatik. Artikel ini akan memperkenalkan cara menggunakan PHP dan PHPMai

Bagaimana untuk menyediakan Cheat Engine dalam bahasa Cina? Kaedah Cina tetapan Cheat Engine Bagaimana untuk menyediakan Cheat Engine dalam bahasa Cina? Kaedah Cina tetapan Cheat Engine Mar 13, 2024 pm 04:49 PM

CheatEngine ialah editor permainan yang boleh mengedit dan mengubah suai memori permainan. Walau bagaimanapun, bahasa lalainya adalah bukan bahasa Cina, yang menyusahkan ramai rakan Jadi bagaimana untuk menetapkan bahasa Cina dalam CheatEngine? Hari ini, editor akan memberi anda pengenalan terperinci tentang cara menyediakan bahasa Cina dalam CheatEngine saya harap ia dapat membantu anda. Kaedah tetapan satu: 1. Klik dua kali untuk membuka perisian dan klik "edit" di sudut kiri atas. 2. Kemudian klik "tetapan" dalam senarai pilihan di bawah. 3. Dalam tetingkap yang terbuka, klik "bahasa" dalam lajur kiri

Penapisan data PHP: mengendalikan input tarikh dan masa Penapisan data PHP: mengendalikan input tarikh dan masa Jul 28, 2023 pm 07:41 PM

Penapisan Data PHP: Gambaran Keseluruhan Input Tarikh dan Masa Pemprosesan: Semasa membangunkan aplikasi web, selalunya perlu memproses data tarikh dan masa yang dimasukkan oleh pengguna. Memandangkan input pengguna mungkin mengandungi pelbagai format dan ralat, penapisan dan pengesahan data yang berkesan diperlukan untuk memastikan ketepatan dan keselamatan data. Artikel ini menerangkan cara menggunakan PHP untuk mengendalikan input tarikh dan masa serta menyediakan contoh kod yang sepadan. Prinsip penapisan dan pengesahan: Sebelum memproses input tarikh dan masa, anda perlu terlebih dahulu menentukan prinsip penapisan dan pengesahan yang sepadan. Berikut adalah beberapa yang biasa

See all articles