次のクエリ(ここでは簡略化)を使用して、文字列に「ウォッチワード」が含まれているかどうかを確認しています。ウォッチワードはMySQLテーブルに含まれています。
$sql = "SELECT ww_id FROM watch_words WHERE ww_word IN (" . $string . ")";
これは単一の単語に対しては完全に機能しますが、フレーズに対しても機能するようにする必要があります(つまり、フィールドww_wordに複数の単語が含まれる場合があります)。私が考えることができるのは、テーブル全体を配列に読み込んでから、文字列内の単語の組み合わせと比較するために複数のループを実行するようなものですが、もっと良い方法があると確信しています。
編集:提案に感謝しますが、Mike Brantが指摘しているように、針はMySQLにあり、干し草の山はPHPにあります。たとえば、検索フォームのような「通常の」方法ではありません。文字列(実際にはメッセージ)に1つ以上の「ウォッチフレーズ」が含まれているかどうかを確認する必要があります。これは、不適切な言語のフィルターのようです(ただし、そうではありません)。
したがって、サンプルテーブル:
CREATE TABLE `watch_words` (
`ww_id` int(11) NOT NULL AUTO_INCREMENT,
`ww_word` varchar(250) NOT NULL,
PRIMARY KEY (`ww_id`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=latin1 AUTO_INCREMENT=6 ;
INSERT INTO `watch_words` VALUES (1, 'foo bar');
INSERT INTO `watch_words` VALUES (2, 'nice sunny day');
INSERT INTO `watch_words` VALUES (3, 'whatever');
INSERT INTO `watch_words` VALUES (4, 'my full name here');
INSERT INTO `watch_words` VALUES (5, 'keyword');
したがって、「なんて素敵な晴れた日」という文字列は一致を返すはずですが、「なんて素敵な晴れた日...」はそうではありません。TIA。