掲示板を作成する場合、多くの場合、キーワードをブロックする必要があります。以下では、ブロックするキーワードを txt で保存し、ユーザーが送信したデータに基づいてフィルターする方法を紹介します。
まずstrpos関数を見てみましょう
strpos() 関数は、別の文字列内で最初に出現した文字列の位置を返します。
文字列が見つからない場合は false を返します。
文法
strpos(string,find,start)パラメータの説明
文字列が必要です。検索する文字列を指定します。
必要なものを見つけてください。検索する文字を指定します。
開始はオプションです。検索を開始する場所を指定します。
ヒントとメモ
注: この関数では大文字と小文字が区別されます。大文字と小文字を区別しない検索の場合は、stripos() 関数を使用します。
例
コードは次のとおりです |
コードをコピー |
echo strpos("Hello world!","wo");
?>
|
1. キーワードを 1 行に 1 つずつ具体的に記述します。いくつでも記述できます。
2. PHP はキーワードテキストを読み取り、配列に保存します
3. キーワード配列を走査し、strpos 関数を 1 つずつ使用して、キーワードが存在するかどうかを確認し、キーワードが存在する場合は true を返し、存在しない場合は false を返します。
PHPコードは以下の通りです
コードは次のとおりです
| コードをコピー
|
/**
* PHP でキーワードをフィルターするには strpos 関数を使用します
*瓊台ブログ
*/
//キーワードフィルター機能
関数 keyWordCheck($content){
$content = トリム($content);
//キーワードテキストを読む
$content = @file_get_contents('keyWords.txt');
// 配列に変換
$arr =explode("n", $content);
// トラバーサル検出
for($i=0,$k=count($arr);$i
// 配列要素が空の場合、このループをスキップします
if($arr[$i]==''){
続く;
}
// キーワードが検出された場合は、一致したキーワードを返して操作を終了します
If(@strpos($str,$arr[$i])!==false){
//$i=$k;
return $arr[$i];
}
//キーワードが検出されない場合は false を返します
false を返します;
}
$content = '公開するテキストコンテンツは次のとおりです。 。 。 ';
// キーワードをフィルタリングします
$keyWord = keyWordCheck($content);
// キーワードが存在するかどうかを判断します
if($keyWord){
echo '投稿したコンテンツにはキーワードが含まれています'.$keyWord;
}その他{
エコー「おめでとうございます!」キーワードで検出';
// 書き込み操作を実行してリリースアクションを完了できます。
}
コードを書いた後、変数 $content にキーワード content をわざと書いて実行したところ、実行結果はキーワードが検出されず、その他の禁止されたキーワードが渡されました。
落ち込んで、何か問題があるのではないかと判断し始めました
エンコードの問題? すぐにメモ帳で keyWord.txt ファイルを再度開き、UTF-8 形式で保存します。結果はまだうまくいきませんでした。
keyWord.txt のテキスト コンテンツを取得できませんでしたか? すぐに print_r() で正常に読み取られ、一行ずつ配列に変換されたことがわかりました。
そこで、プログラム内でキーワード配列を直接宣言しました
コードは次のとおりです |
コードをコピー |
/**
* PHP でキーワードをフィルターするには strpos 関数を使用します
*瓊台ブログ
*/
//キーワードフィルター機能
関数 keyWordCheck($content){
$content = トリム($content);
//キーワードテキストを読む
//$content = @file_get_contents('keyWords.txt');
// 配列に変換
//$arr =explode("n", $content);
//プログラム内でキーワード配列を直接宣言します
$arr = array('キーワード 1','キーワード 2','キーワード 3','キーワード 4'...);
// トラバーサル検出
for($i=0,$k=count($arr);$i
// 配列要素が空の場合、このループをスキップします
if($arr[$i]==''){
続く;
}
// キーワードが検出された場合は、一致したキーワードを返して操作を終了します
If(@strpos($str,$arr[$i])!==false){
//$i=$k;
return $arr[$i];
}
//キーワードが検出されない場合は false を返します
false を返します;
}
$content = 'ここにキーワード 2 を含む、公開するコンテンツがあります';
// キーワードをフィルタリングします
$keyWord = keyWordCheck($content);
// キーワードが存在するかどうかを判断します
if($keyWord){
echo '投稿したコンテンツにはキーワード ['.$keyWord.'] が含まれています';
}その他{
エコー「おめでとうございます!」キーワードで検出';
// 書き込み操作を実行してリリースアクションを完了できます。
}
// プログラム実行結果:投稿した内容にはキーワード[キーワード2]が含まれています
// プログラムは正常です
PHPでキーワード配列を宣言すると動くのですが、テキストファイルを読み込むと動かないんです。
不思議に思ったときに、テキストファイルから読み込んだ内容にスペースや改行が含まれていてフィルタリングされていないことが原因ではないかと考えました。そこでトラバーサルマッチングにトリム機能を追加しました
空白を除外するtrim()関数を追加し、実行した後、問題がここにあることが判明しました。
コードは次のとおりです |
コードをコピー |
/**
* PHP でキーワードをフィルターするには strpos 関数を使用します
*瓊台ブログ
*/
//キーワードフィルター機能
関数 keyWordCheck($content){
// 空白を削除します
$content = トリム($content);
//キーワードテキストを読む
$content = @file_get_contents('keyWords.txt');
// 配列に変換
$arr =explode("n", $content);
// トラバーサル検出
for($i=0,$k=count($arr);$i
// 配列要素が空の場合、このループをスキップします
if($arr[$i]==''){
続く;
}
// キーワードが検出された場合は、一致したキーワードを返して操作を終了します
// 今回はtrim()関数を追加しました
If(@strpos($str,trim($arr[$i]))!==false){
//$i=$k;
return $arr[$i];
}
// キーワードが検出されない場合は false を返します
false を返します;
}
$content = '公開するテキストコンテンツは次のとおりです。 。 。 ';
// キーワードをフィルタリングします
$keyWord = keyWordCheck($content);
// キーワードが存在するかどうかを判断します
if($keyWord){
echo '投稿したコンテンツにはキーワードが含まれています'.$keyWord;
}その他{
エコー「おめでとうございます!」キーワードで検出';
// 書き込み操作を実行してリリースアクションを完了できます。
}
|
|
http://www.bkjia.com/PHPjc/629646.html
www.bkjia.comtruehttp://www.bkjia.com/PHPjc/629646.html技術記事掲示板を作成する場合、キーワードやいくつかのキーワードをブロックする必要があることがよくあります。次に、ブロックするキーワードを txt を使用して保存し、ユーザーが送信したデータに基づいてフィルターする方法を紹介します。 まずは…
|