さくらのレンタルサーバの環境でmephisto0.8を動かすと,記事の登録時にエラーが出て実行できなくなった.ログを見ると,”Iconv::InvalidEncoding (invalid encoding (“ascii//translit//IGNORE”, “utf-8”))”が出ていて,どうやらエンコードの変換ができてないもよう.
同等の変換をiconvに直接入れてみても,下記のようなエラーが出るので,どうやらさくらの環境(FreeBSD)だと対応していないエンコーディングなのが問題らしい.(同様のコマンドをDebian etch環境で動かすと普通に通る)
$ echo 'test' | iconv -t ascii//translit//IGNORE -f utf-8 iconv: conversion to ascii//translit//IGNORE unsupported
なので,問題を起こしているpermalink_fuプラグインを書き換えて対処することに.本来的にはlibiconv辺りを入れ替えるべきなんだけど,それが出来ないのがホスティングサーバのつらいところです.
具体的にはGoogle Groupsの”Mephisto blog”グループの記事にあるように,エンコーディング名にIGNOREを付けているところを変更すればよい.
--- vendor/plugins/permalink_fu/lib/permalink_fu.rb 2008-08-15 10:22:38.000000000 +0900 +++ vendor/plugins/permalink_fu/lib/permalink_fu.rb 2008-08-20 01:02:21.000000000 +0900 @@ -6,7 +6,7 @@ module PermalinkFu attr_accessor :translation_from def escape(str) - s = Iconv.iconv(translation_to + '//IGNORE', translation_from, str).to_s + s = Iconv.iconv(translation_to, translation_from, str).to_s s.gsub!(/\W+/, ' ') # all non-word chars to spaces s.strip! # ohh la la s.downcase! #
しかしこの”ascii/translit”エンコードって何なんだろう.phpでよくつかわれているらしいが,URLエンコードされた文字列を扱うためのものなのか???
「対応していないエンコーディング」ではなく、”//IGNORE”や”//TRANSLIT”は、GNU iconv独自の拡張です。
iconvライブラリがGNU iconvでないオペレーティング・システム(OpenSolarisなど)でも同じ問題は発生するはずです。
移植性を確保するのであれば、GNU iconv独自の拡張を使わないことです。