よしたかの日常

日常の事やイラスト投稿、開発している時の備忘録を書いています。

自由入力欄を作成する際に、特定のHTMLタグだけ許可して表示する方法

自由入力欄に特定のHTMLタグを許可して登録することがあったので、その際の議事録です。 タグや、タグなどの属性を利用する歳は、正規表現などで属性を許可してあげて登録します。

登録する際に使用する関数

function tagKyoka($str) {
    $search = array('<b>','</b>','<i>','</i>','<s>','</s>','<u>','</u>','<strong>','</strong>','<br>','<br/>','<br />','<hr>','<hr/>','<hr />','</font>','</a>','"');
    $replace = array('<b>','</b>','<i>','</i>','<s>','</s>','<u>','</u>','<strong>','</strong>','<br>','<br/>', '<br />','<hr>','<hr/>', '<hr />','</font>','</a>','"');
    $str = str_replace($search, $replace, $str);

    // fontタグ
    $pattern = array('/&lt;(font(?:(?: color=[\"\']?(?:&quot;)?[#0-9a-z]{1,20}[\"\']?(?:&quot;)?)?|(?: size=[\"\']?(?:&quot;)?[\d]{1,3}[\"\']?(?:&quot;)?)?)*)&gt;/i');
    $replace = array('<$1>');
    $str = preg_replace($pattern, $replace, $str);

    // aタグ
    $pattern = array('/&lt;(a(?:(?: href=[\"\']?(?:&quot;)?(https?|ftp)(:\/\/[-_.!~*\'()a-zA-Z0-9;\/?:\@&=+\$,%#]+)?[\"\']?(?:&quot;)?(?: target=[\"\']?(?:&quot;)?([_a-zA-Z]+)?[\"\']?(?:&quot;)?)?)?)*)&gt;/i');
    $replace = array('<$1>');
    $str = preg_replace($pattern, $replace, $str);

    // imgタグ
    $pattern = array('/&lt;(img(?:(?: src=[\"\']?(?:&quot;)?((https?|ftp)?(:\/\/)?[-_.!~*\'()a-zA-Z0-9;\/?:\@&=+\$,%#]+)?[\"\']?(?:&quot;)?)?)*)&gt;/i');
    $replace = array('<$1>');
    $str = preg_replace($pattern, $replace, $str);

    return $str;
}

登録したのを表示する際に使用する関数

function stripTags($str) {
    $tag = '<br><hr><b><i><s><u><strong><font><a><img>';
    $str = strip_tags($str, $tag);
    return $str;
}

登録したタグを表示する際は、表示するようの関数を呼び出して使用します。

echo stripTags($text);