2011年2月20日

[PHP-users 35498] Re:ereg関数:[留学]と[嘘]の一致について

クニヒロと申します。

ereg関数の戻り値の説明に
http://jp2.php.net/manual/ja/function.ereg.php
> オプションのパラメータ regs が渡されなかったり マッチした文字列の長さが 0 だったりした場合は、この関数は 1 を返します。
とありますので常に==trueになっているのではないかと思います。

本件では入力された文字列に検索文字列が含まれているかの判定のみのようですので

strposなどで十分なのではないかと思います。

if (strpos($incmnt, $ngwords[$n]) !== false) {
print "禁止ワードあり";
exit;
}

また、HTMLがEUCということなのでブラウザから送られてくる文字列もEUCである可能性が高いです。
禁止ワードを定義するPHPファイルの文字コードにも注意が必要です。
マルチバイト文字列関数(mb_〜で始まる関数)を利用するならmb_internal_encodingやmb_regex_encodingの設定も必要かもしれません。

以上
参考になれば幸いです。

2011年2月20日16:44 Kumiko ENOMOTO <kijibato@xxxxx>:
> お世話になります。
>
> ブラウザ(EUCで作成されたHTML)のテキストエリアに
> ユーザーが入力した文字列について、
> PHPプログラム内で禁止ワードチェックを行っています。
>
> ereg関数を使用しているのですが、
> 「留学」と「嘘」が一致してしまいます。
> PHPプログラム内で「留学」という文字列を直接指定しても同じです。
>
> // 禁止ワード配列
> $ngwords = array("馬鹿","嘘","阿呆");
> // ブラウザ上で入力された文字列
> $incmnt = "留学";
> $cntng = count($ngwords);
> for ($n=0; $n<$cntng; $n++){
> if (ereg($ngwords[$n], $incmnt) == true){
> print "禁止ワードあり";
> exit;
> }
> }
>
> 「留」や「学」の漢字が単体だと一致せず、
> 以下のような通常の比較の場合は、
> 「留学」と「嘘」は当然一致しません。
>
> if ($ngwords[$n] == $incmnt) {
> print "禁止ワードあり";
> exit;
> }
>
> 何が原因と思われますか?
> ご教授のほど、よろしくお願いします。
>
>
> 榎本久美子
>
> _______________________________________________
> PHP-users mailing list PHP-users@xxxxx
> http://ml.php.gr.jp/mailman/listinfo/php-users
> PHP初心者のためのページ - 質問する前にはこちらをお読みください
> http://oldwww.php.gr.jp/php/novice.php3
>
_______________________________________________
PHP-users mailing list PHP-users@xxxxx
http://ml.php.gr.jp/mailman/listinfo/php-users
PHP初心者のためのページ - 質問する前にはこちらをお読みください
http://oldwww.php.gr.jp/php/novice.php3


投稿者 xml-rpc : 2011年2月20日 21:03
役に立ちました?:
過去のフィードバック 平均:(0) 総合:(0) 投票回数:(0)
本記事へのTrackback: http://hoop.euqset.org/blog/mt-tb2006.cgi/102160
トラックバック
コメント
コメントする




画像の中に見える文字を入力してください。