phpな休日 BBS sitemap
1. php6になると “ereg” が廃止

phpマニュアルをみていたら “ereg” のページでとんでもないものを見てしまった。

スクリーンショット画像

私はよく使います“ereg”。このサイトのindex.phpだけ見ても“ereg”・“eregi”・“mb_ereg”と使用している。
php6に移行するのが何年後か知らないけれど、ぼちぼち修正していかないととても追いつかなくなりそうなので気が付いたところからやっていきます。
で、さっそくですがトップのメールフォームで禁止語句の設定をしている部分

if (mb_eregi("萌", "$comment")) {
print "“萌” は禁止語句になっています。¥n";
}

な感じで“萌”を禁止しているわけですが、“ereg” のかわりに “strstr” を使うことにします。

if (strstr($comment, "萌")) {
print "“萌” は禁止語句になっています。¥n";

else {
print $comment . "¥n";
}

対象となる文と探す語句の書き方が逆になるのが要注意です。

実行
2. URLを禁止する (preg_match)

さらに掲示板やブログのコメント投稿のスパム対策によく使用しているのが、URLの書き込み禁止。
実際これでほとんどのスパムな書き込みを防止できるので重宝しているのですが

if (ereg ("(https?|ftp|news)(://[[:alnum:]¥S¥+¥$¥?¥.%,!#~*/:@&=_-]+)",$comment)) { //コメント内にURLがあれば

代替関数は preg_match なのでしょうが、上記正規表現ソースはどこかのサイトからいただいてきたもので、単純に ereg を preg_match に書きかえただけではエラーが出てしまう。
私は正規表現の書き方がほぼわからないので、ちょっと端折って

if (preg_match ("|(https?)(://[[:alnum:]¥+¥$¥;¥?¥.%,!#~*/:@&=_-]+)|", $comment)) { 
print "<font color=¥"red¥">〔危険〕</font> コメント内にURLが含まれています。¥n";
}
else {
print $comment . "¥n";
}

こんなところでお茶を濁すことにしました。

実行


Fatal error: Uncaught Error: Undefined constant "Y.n.j" in /home/users/2/secret.jp-final/web/phpholiday/37/index.cgi:69 Stack trace: #0 /home/users/2/secret.jp-final/web/phpholiday/index.php(334): include() #1 {main} thrown in /home/users/2/secret.jp-final/web/phpholiday/37/index.cgi on line 69