2011年2月9日水曜日

module.textsanitizer.php 日本語のクリッカブルリンクでHTMLが壊れる件

 XOOPS Cube 2.1.8 のコアの話ですが、日本語混じりだとHTMLが壊れる事があります。こんな感じで、正規表現を変えます。

    /**
     * Make links in the text clickable
     * 2010/07/06 Y.Sakai change pattern for japanese char
     * @param   string  $text
     * @return  string
     **/
    function &makeClickable(&$text)
    {
//        $patterns[] = "/(^|[^]_a-z0-9-=\"'\/])([a-z]+?):\/\/([^, \r\n\"\(\)'<>]+)/i";
//        $replacements[] = "\\1<a href=\"\\2://\\3\" target=\"_blank\">\\2://\\3</a>";
        $patterns[] = "/(^|[^]_a-z0-9-=\"'\/])([a-z]+?):\/\/([-_.!~*\'()a-zA-Z0-9;\/?:\@&=+\$,%#]+)/i";
        $replacements[] = "\\1<a href=\"\\2://\\3\" target=\"_blank\">\\2://\\3</a>";
        $patterns[] = "/(^|[^]_a-z0-9-=\"'\/])www\.([a-z0-9\-]+)\.([^, \r\n\"\(\)'<>]+)/i";
        $replacements[] = "\\1<a href=\"http://www.\\2.\\3\" target=\"_blank\">www.\\2.\\3</a>";
        $patterns[] = "/(^|[^]_a-z0-9-=\"'\/])ftp\.([a-z0-9\-]+)\.([^, \r\n\"\(\)'<>]+)/i";
        $replacements[] = "\\1<a href=\"ftp://ftp.\\2.\\3\" target=\"_blank\">ftp.\\2.\\3</a>";
        $patterns[] = "/(^|[^]_a-z0-9-=\"'\/:\.])([a-z0-9\-_\.]+?)@([a-z0-9!#\$%&'\*\+\-\/=\?^_\`{\|}~\.]+)/i";
        $replacements[] = "\\1<a href=\"mailto:\\2@\\3\">\\2@\\3</a>";

        return preg_replace($patterns, $replacements, $text);
    }

0 件のコメント:

コメントを投稿