サニタイジングと URL 自動リンクのジレンマ 2

PHP の場合。こんなコードを書いてる掲示板が多いようで。

// 投稿されたメッセージを取得して
$message = $_POST[ "message" ];
// HTML サニタイジングして
$message = htmlspecialchars( $message );
// URL をリンクに変換
$message = ereg_replace( "(https?|ftp)(://[[:alnum:]\+\$\;\?\.%,!#~*/:@&=_-]+)","<a href=\"\\1\\2\" target=\"_blank\">\\1\\2</a>", $message );

上と全く同じじゃなくても

1. HTML の特殊文字を変換
2. URL 自動リンク

という順番で処理を行ってるとちょっとまずいことになっちゃいます。

<a href="http://exsample.com/test.cgi?page=10&mode=post">test</a>

この文字列を上の処理にかけると・・・

<a href="http://exsample.com/test.cgi?page=10&mode=post">test</a>

いきすぎちゃってるよ!

という感じで太字の部分がリンクに変換されちゃいます。おかしいです。

何でそうなるかは今度書く罠。

カテゴリ

トラックバック(0)

このブログ記事を参照しているブログ一覧: サニタイジングと URL 自動リンクのジレンマ 2

このブログ記事に対するトラックバックURL: http://je-pu-pu.jp/blog/mt-tb.cgi/158

コメント(3)

sydney :

<a という文字を検出したら閉じタグまでHTMLをparseするモードに切り替わって処理するというのはどうか.
いややってみないとわかんないけど.

JE :

実はもう解決してるけど一気に書くのがめんどくさいので小出しにしている罠。

Keigo :

にゃにぃぃぃ

コメントする

このブログ記事について

このページは、が2005年2月 4日 23:59に書いたブログ記事です。

ひとつ前のブログ記事は「mb_detect_encoding が false を返す」です。

次のブログ記事は「おでかけしてきましたけどねー」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

Powered by Movable Type 4.0