1

ユーザー コメントの URL をリンクに変換したい。

HTML Purify のような肥大化したアンチ xss ライブラリをテストする時間がないので、html タグを許可しません。

すべてを htmlentities() と nl2br() を通過させ、preg_replace() を使用して URL を検索し、それらをリンク ('a' html タグ) に変換したいだけです。

見つけた URL を取得して href='' 内に配置するのは安全ではありませんか?

そうでない場合、どうすればよいですか?

4

1 に答える 1

1

はい、安全なはずです。方法がわからない場合は、これに使用する関数を次に示します (この投稿のために簡略化しました)。

function formatPost($string) {
    return nl2br(
        preg_replace_callback(
            '~https?://([^/\s]+)(?:/((?>[/\w]+|\S(?!\s|$))*))?~',
            function($matches) {
                $url  = $matches[0];
                $host = $matches[1];
                $path = isset($matches[2]) ? $matches[2] : '';
                $follow = false;

                if ('' == $path) {
                    $text = $host;
                } elseif ($_SERVER['HTTP_HOST'] == $host) {
                    $text = $path;
                    $follow = true;
                } else {
                    $text = $host . '/' . $path;
                }

                return '<a href="' . $url . '"' . (!$follow ? ' rel="nofollow"' : '') . '>' . $text . '</a>';
            },
            htmlspecialchars($string)
        )
    );
}
于 2011-03-19T09:55:48.587 に答える