禁止タグのチェック
フォーラムの原型ができあがったので、細かな部分を作りこんでいきます。
非常に面白い関数を知ったので、まず禁止タグから取り掛かりたいと思います。
面白い関数とは、 htmlspecialchars です。
Perlでは、パターンマッチを使用して処理をしていたのですが、何も考えなければ htmlspecialchars の関数だけで処理できます。
この関数は、HTMLで特殊な意味を持つ文字を変換してくれます。
‘&’ (アンパサンド)は'&‘になります。 |
ENT_NOQUOTESが設定されていない場合、'"’ (ダブルクォート) は ‘"’になります。 |
ENT_QUOTESが設定されている場合のみ、’'' (シングルクオート) は ‘�‘になります。 |
‘<’ (小なり) は ‘<’ になります。 |
‘>’ (大なり) は ‘>’ になります。 |
この関数を使用することによって、タグは全て変換されタグとしての機能をなくします。しかし、表現豊かなフォーラムにするには少し問題がありそうですね。
また、掲示板等で「imgタグだけは許可したい」といった場合も問題ありそうですね。
一部のタグを使用可能にする
非常に便利な関数があるので、それを利用しつつ一部のタグを使用可能にしたいと思います。この方法は、phpで作られた掲示板でよく見かけます。
HTMLで使用するタグの変わりに独自のタグを設定するという方法です。
メッセージの本文に代理のタグを入力し、表示する際にタグに置き換えて表示します。これで表現豊かなフォーラムにすることができそうです。代理タグを入力するには、JavaScriptを使用します。また、Tipsなども表示してみます。
例:JavaScriptとHTML
function insertcode(text) {
document.post.message.value += text;
document.post.message.focus();
}
// messages
bold_msg = "太文字にします。: [b]文章[/b] (alt+b)";
italic_msg = "斜体にします。: [i]文章[/i] (alt+i)";
under_msg = "下線を引きます。: [u]文章[/u] (alt+u)";
function showtips(text) {
document.post.tips.value = eval(text + "_msg");
}
//HTML部分
<input class=btndecoration onmouseover="showtips('bold')" accessKey="b" onclick="insertcode('[b] [/b]')" type="button" value=" B ">
<input class=btndecoration onmouseover="showtips('italic')" accessKey="i" onclick="insertcode('[i] [/i]')" type="button" value=" i ">
<input class=btndecoration onmouseover="showtips('under')" accessKey="u" onclick="insertcode('[u] [/u]')" type"=button" value=" u ">
<input class="tips" name="tips" size="100">
文字色の変更や文字サイズの変更等を用途により追加していきます。
後は、表示するとき str_replace を使用して代理タグを正規のタグへ置き換えます。
$msg = str_replace('[b]','<b>',$msg);
$msg = str_replace('[/b]','</b>',$msg);