2011年2月11日金曜日

EUC-JPからUTF-8へ

もしあなたが大量のEUC-JPファイルを作っていたら、どうやってUTF-8へ移行するか頭を抱える事でしょう。

しかし、私はここにとてもよい解決方法を見つけました。


kanjitranslatorというフォルダ一括変換ツールです。これを使うとwikiの様なフォルダにある大量のEUC-JPファイルを一括してUTF-8へ変換できます。

もう、文字列コード変換で悩む事はありません。

2011年2月9日水曜日

サニタイズについて

Rails の場合 white list に基づいて3段階、RESTRICTED,BASIC,RELAXED
とサニタイズします。
XOOPSのコアにもこんなサニタイズのクラスが欲しいですね。
 
# html = Sanitize.clean(対象のhtml文字列, オプションのhash)
require 'rubygems'
require 'sanitize'

html = '<b><a href="http://foo.com/">foo</a></b>
<img src="http://foo.com/bar.jpg" />'
Sanitize.clean(html) # => 'foo'
Sanitize.clean(html, Sanitize::Config::RESTRICTED) # => 
'<b>foo</b>'
Sanitize.clean(html, Sanitize::Config::BASIC) # => 
'<b><a href="http://foo.com/" rel="nofollow">foo</a></b>'
Sanitize.clean(html, Sanitize::Config::RELAXED) # => 
'<b><a href="http://foo.com/">foo</a></b><img src="http://foo.com/bar.jpg" />'

カスタマイズでこんな事も

Sanitize.clean(html, :elements => ['a', 'span'],
    :attributes => {'a' => ['href', 'title'], 'span' => ['class']},
    :protocols => {'a' => {'href' => ['http', 'https', 'mailto']}})

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);
    }