只今、PHPでシステムをつくる課題に取り組んでます。
初心者でphpはほとんど分からず、あいまいな質問かもしれませんが回答よろしくお願いします。
簡単な掲示板の作成、ということで掲示板を作っている最中であります。
■禁止ワードをphpで設定。
■もしくは書き込んだテキストファイルから、NGワードがある行を削除する。
という方法をさがしてます。
トップ画面から、投稿ボタン(submit)で→書き込む画面へと移り、テキストファイルに書き込み→トップ画面に戻り、テキストファイルの読み込み
を行います。
NGワード設定やテキストファイル削除等色々試してみたのですが、うまく作動しません。
分かる方いましたら、よろしければどこにどのようにすればいいのか教えていただけないでしょうか??
書き込み画面↓↓のソースの一部です。
<p><a href="keiji.php">スレッドに戻る</a></p>
<?php
$zikoku = date( "Y/m/j H:i:s " );
$youbi = date("D");
$no_word[] = "/死ね/";
$fp = fopen("keijiban.txt", "a+");
flock($fp, LOCK_EX);
fwrite($fp,
"<p><table>
<tr>
<td>名前 </td><td>".$_POST['name']."</td>
<td> 送信日</td><td>$zikoku($youbi)</td>
</tr>
<tr><td>".$_POST['comment']."</td>
</tr>
</table></p>");
if (is_array($no_word)) {
foreach(&no_word as $ng){
if(ereg($ng, $_POST['comment']))return FALSE;
}}
return TRUE;
flock($fp, LOCK_UN);
fclose($fp);
?>
$no_word[]がNGワードだとしています。
もちろん他にも付け加えていきたいです。
A 回答 (2件)
- 最新から表示
- 回答順に表示
No.2
- 回答日時:
こんなんでどうでしょう。
禁止語句を、伏字に変えるだけでしたら、1行コーディングです。
禁止語句を含む行を消すのでしたら、array_filterを使えます。
<?php
$lines = array('死ね あああ', 'いいいいいいいい', 'ううううううううう アホ', 'ええええええええええ');
/* 行を消す */
function removeLineWithNGWord($line) {
$ng_word = array('死ね','アホ');
$ng_pattern = '(' . implode('|', $ng_word) . ')';
return preg_match($ng_pattern, $line) == 0;
}
$lines0 = array_filter($lines, 'removeLineWithNGWord');
var_dump($lines0);
/* 伏字 */
$ng_word = array('死ね','アホ');
$lines1 = str_replace($ng_word, '****', $lines);
var_dump($lines1);
?>
No.1
- 回答日時:
フローを考えるときに無駄な部分まで盛り込むと本質が見えにくく
なりますので、いらない部分はバッサリカットして検証なさることを
お勧めします。
今回の件については、テキストのデータからNGワードを削除する
のではなく、単にPOSTされたデータを検証し、NGワードが入っていれば
削除するという流れの方がよいような気がしますが・・・
ただ、文字コードの問題もあるのでいろいろ調整は必要です
一応、テキストデータからNGワードを削除して書き換える方法は
こんな感じでどうでしょう?
フローだけでもわかれば応用がきくと思います
<?
$fname="keijiban.txt";
$ng_word=Array("死ね","その他");
$ng_reg="";
foreach($ng_word as $val){
$ng_reg.=($ng_reg==""?"":"|").preg_quote($val,"/");
}
$ng_reg="/.*(".$ng_reg.").*\n/";
$handle=fopen($fname,"r");
$contents = fread($handle, 1024);
fclose($handle);
if(preg_match($ng_reg,$contents)){
$contents=preg_replace($ng_reg,"",$contents);
$handle=fopen($fname,"w");
fwrite($handle,$contents);
fclose($handle);
}
?>
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- HTML・CSS テーブルタグのセルの幅の一部だけを指定 1 2023/03/12 12:02
- AJAX JavascriptからPHPへのAjax通信でnullが返ってくる 3 2022/08/03 22:00
- Visual Basic(VBA) Selenium.ChromeDriverの使い方について 7 2022/09/22 06:43
- PHP htmlで複数の個数入力欄を表示させるには 1 2022/09/20 03:11
- JavaScript EasyUIのSubGrid(jquery)におけるObjectに入れた連想配列について 1 2022/05/02 11:21
- HTML・CSS 【CSS】:hasで可能? imgを含むtr要素を選択したい 1 2022/11/17 14:36
- MySQL SQL任意に並び替えをしたい 2 2023/08/28 10:47
- HTML・CSS 自身のHPにYouTube動画を貼り付けるのが出来なくなり困ってます 1 2022/11/11 10:44
- JavaScript jQueryで同じクラス名のものを別物として扱いたい 1 2022/06/17 14:14
- JavaScript 追加ボタンを押した際に ok ボタンを押した場合のみ入力値が追記されるようにしたいです 6 2022/05/29 09:57
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
プルダウンメニューにDBの内容...
-
要素(文字列)から指定値を検索
-
日付、時間の2段階でソート
-
file_get_contentsなどでrefere...
-
テキストボックスの日本語をロ...
-
配列をループでたくさん宣言し...
-
ヒアドキュメントの中のfor文
-
file_existsでファイル名の部分...
-
[PHP] fputcsv()関数でファイル...
-
PHP 多次元配列変数のデータ受...
-
doxygenを使用する環境について
-
PHPのPOSTでの半角スペース
-
別ファイルの構造体の値を読み...
-
多次元配列を、1次元の配列にす...
-
PHPについて教えて下さい。
-
C言語で全角文字の扱いについて
-
文字列の文字一文字ずつを解析...
-
連想配列でキーを利用して一部...
-
PHPのセレクトボックスの初期値...
-
【PHP】配列の最後の要素の...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
プルダウンメニューにDBの内容...
-
phpとmysqlで「あいまい検索」...
-
日付、時間の2段階でソート
-
NGワード設定もしくはテキス...
-
掲示板のあらし対策
-
flickrでの画像を取得について
-
テキストボックスの日本語をロ...
-
PHPでファイルアップローダー
-
HTTPのメッセージボディについ...
-
PEAR・MDB2のモジュールロード...
-
phpのin_array()でわからない事...
-
PHP5の外部コマンド実行で、バ...
-
Mysqlとphpでソートや更新時の...
-
しりとり 無限ループ?
-
2次元配列の値の受け渡しについ...
-
if の中の 複数のor についてお...
-
pukiwikiのユーザ認証の設定で...
-
Zend_Form_Element_Hash
-
「ローマ字 -> ひらがな」へPHP...
-
プログラミングのPythonのnoteb...
おすすめ情報