質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.31%
WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

正規表現

正規表現とは特定の文字列によるパターンマッチングを行う際に用いられる宣言型プログラミングです。

Q&A

解決済

1回答

639閲覧

掲示板のNGワードはどこまで制限すべきでしょうか

homepage-site

総合スコア70

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

正規表現

正規表現とは特定の文字列によるパターンマッチングを行う際に用いられる宣言型プログラミングです。

0グッド

0クリップ

投稿2024/01/13 06:55

編集2024/01/13 06:56

実現したいこと

イラストのQ&A掲示板にNGワードを設けて犯罪、差別的な言葉が書き込まれないように制限したい。

発生している問題・分からないこと

現在荒らし対策のために空白と改行は連続して入力できないように対策しているのですが、参考サイトを見ると句読点や記号にも対応するようなコードが書かれており、どこまで制限すべきか悩んでおります。

例を考えてみました。「死ね」というNGワードを設定している場合、「死、ね」や「死。ね」と入力された場合は制限できず書き込めてしまいます。
句読点を削除して「死ね」に変換することで、「死ね」と一致するかチェックして削除することができます。
ですが、「死×ね」「死/ね」「死☆ね」「死♪ね」とUTF8の記号すべてに対応する場合きりがありません。

上記とは別の問題もあり「ばか」をNGワードに設定したとします。日常会話で使う「ばかり」まで制限にかかってしまい書き込めないです。
NGワードの制限範囲はどこまで設定するのが適切でしょうか?

※参考サイト
https://php.o0o0.jp/article/php-ng_words

該当のソースコード

PHP

1<?php 2 3class MAX_LENGTH 4{ 5public const NAME = 50; 6public const MESSAGE = 500; 7} 8 9function bbs_quest_input() 10{ 11 session_start(); 12 $message = $_POST['message']; 13 $namae = $_POST['namae']; 14 $stamp = $_POST['stamp']; 15 $namae = Chk_StrMode($namae); 16 $message = Chk_StrMode($message); 17 Chk_ngword($namae, '・NGワードが入力されています。', $error); 18 Chk_ngword($message, '・NGワードが入力されています。', $error); 19 Chk_InputMode($namae, '・お名前をご記入ください。', $error); 20 Chk_InputMode($message, '・お問い合わせ内容をご記入ください。', $error); 21 Chk_InputMode($stamp, '・スタンプを選択してください。', $error); 22 CheckUrl($namae, '・お名前にURLは記入できません。'); // 追加 23 CheckUrl($message, '・お問い合わせ内容にURLは記入できません。'); // 追加 24 $result = []; 25 if (empty($error)) { 26 $result['error'] = ''; 27 $_SESSION['namae'] = $namae; 28 $_SESSION['message'] = $message; 29 $_SESSION['stamp'] = $stamp; 30 $_SESSION['attach'] = $_FILES['attach']; 31 foreach ($_FILES['attach']['tmp_name'] as $i => $tmp_name) { 32 if (!empty($tmp_name)) { 33 $_SESSION['attach']['data'][$i] = file_get_contents($tmp_name); 34 } 35 } 36 } else { 37 $result['error'] = $error; 38 $_SESSION['namae'] = ''; 39 $_SESSION['message'] = ''; 40 $_SESSION['stamp'] = ''; 41 $_SESSION['attach'] = null; 42 } 43 header('Content-type: application/json; charset=UTF-8'); 44 echo json_encode($result); 45 exit; 46} 47add_action('wp_ajax_bbs_quest_input', 'bbs_quest_input'); 48add_action('wp_ajax_nopriv_bbs_quest_input', 'bbs_quest_input'); 49 50function Chk_ngword($str, $mes, $error) 51{ 52 // NGワードリスト配列の定義 53 $ng_words = array('死ね','アホ','殺す','バカ'); 54 foreach ($ng_words as $ngWordsVal) { 55 // 対象文字列にキーワードが含まれるか 56 if (mb_strpos($str, $ngWordsVal) !== FALSE) { 57 $error[] = $mes; 58 } 59 } 60} 61function Chk_StrMode($str) 62{ 63 // 連続する空白をひとつにする 64 $str = preg_replace('/[\x20\xC2\xA0]++/u', "\x20", $str); 65 // 連続する改行をひとつにする 66 $str = preg_replace("/(\x20*[\r\n]\x20*)++/", "\n", $str); 67 // 前後の空白を除去 68 $str = mb_ereg_replace('^( ){0,}', '', $str); 69 $str = mb_ereg_replace('( ){0,}$', '', $str); 70 $str = trim($str); 71 // 特殊文字を HTML エンティティに変換する 72 $str = htmlspecialchars($str); 73 74 return $str; 75} 76/* 未入力チェックファンクション */ 77function Chk_InputMode($str, $mes, $error) 78{ 79 if ('' == $str) { 80 $error[] = $mes; 81 } 82} 83 84/* 以下追加 */ 85function CheckUrl($checkurl, $mes) 86{ 87 global $errors; 88 if (preg_match("/[\.,:;]/u", $checkurl)) { 89 $errors[] = $mes; 90 } 91} 92?>

試したこと・調べたこと

  • teratailやGoogle等で検索した
  • ソースコードを自分なりに変更した
  • 知人に聞いた
  • その他
上記の詳細・結果

恐らくまとめ掲示板などはNGワードのみ設定しており、句読点や記号には対応していないのではないかと考えております。

※参考サイト
https://qiita.com/hose/items/774ac58f0155ef0a9973

補足

特になし

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tezcello

2024/01/13 07:39

> 句読点を削除して「死ね」に変換することで、「死ね」と一致するかチェックして削除する 「~の場面で盗塁死。ねぇ…こんな作戦あり得ないでしょ?」 こういうのも引っ掛かるけど、投稿できない様にしたいですか? 「タヒね」ってのも随分流行ったと思うけど? __半角カタカナもあり > NGワードの制限範囲はどこまで設定するのが適切でしょうか? どれだけの労力をかけて「NGワードの制限」をしたいかです。 他者にその熱意を判定する事は出来ません。 自動判定は難しいと考えるなら、全てを管理者が読んで「問題無し」としたものだけ公開する手もあります。
ikedas

2024/01/13 08:05

> 上記とは別の問題もあり ひとつの質問でふたつ以上のことを尋ねないほうがいいと思います。回答するひとが困ります。
homepage-site

2024/01/13 13:26

tezcello さん Q.「~の場面で盗塁死。ねぇ…こんな作戦あり得ないでしょ?」 こういうのも引っ掛かるけど、投稿できない様にしたいですか? 自動判定は難しいと考えるなら、全てを管理者が読んで「問題無し」としたものだけ公開する手もあります。 A.回答ありがとうございます、まとめサイトや Youtube ニコニコ動画等の配信サイトでも死は NGワードとして設定されているのではないかと考えております。 そちらの基準を参考に考えたほうがよさそうですね… 句読点や記号は制限しない形で実装してみて、場合によっては管理者が確認後に表示するように切り替えながら実装してみます。
homepage-site

2024/01/13 13:28

ikedas さん アドバイスありがとうございます。以後気を付けます。
guest

回答1

0

ベストアンサー

ちゃんとやるならAIに食わせて解釈して問題がなければ掲載・・・的な処理が必要でしょう。たとえばteratailですと「&#27515;&#12397;」も表示上は「死ね」になりますしシステムでフィルタするのも限界がありますね
teratailの運営とおなじように通報→警告→垢BANで十分だと思います

投稿2024/01/15 03:43

編集2024/01/15 03:44
yambejp

総合スコア117732

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.31%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問