Movable Type 備忘録

 

 Ajaxの出力結果を文字コード変換する

わたしのサイトでもAjaxを利用したカスタマイズを紹介しています。

でも、AjaxはUTF-8を前提としているようで、人によってはEUCを使用していたりしますよね。 じゃぁ、そういう人たちはAjaxを使えないかといったら、そんなことありません。

わたしのサイトではMovableType(ムーバブルタイプ)標準のUTF-8を使用しているので、この先もお世話になることはないと思いますが、今回はAjaxの出力結果を任意の文字コードに変換するカスタマイズを紹介します。

実は以前にもoscarさんともそういった話をしたことがありまして、oscarさんのところではEUCを使っているそうなんです。 で、わたしのとこで紹介したメールフォームが文字化けしてしまう…ということで、Ogawa::Memorandaさんのところで配布している、MT-I18Nプラグインを使用して対処したとのことでした。

また、最近小粋空間さんのところでもAjaxを利用したカレンダー / Ajax 月送りカレンダー(横型)が紹介されていますが、やっぱり文字コード変換にMT-I18Nプラグインが使用されています。

ということで、そのプラグインの使い方をご紹介します。

MT-I18Nプラグインの入手はこちらから▼
http://code.as-is.net/wiki/MT-I18N_Plugin.ja_JP

MT-I18Nプラグインの使い方

使い方といってもそんなムズかしいことはまったくありません。 まず、上記URLからプラグインをダウンロードして、いつものようにmt/plugins/ディレクトリの中にアップロードします。

そして、エンコード( 文字コード変換 )したいコードを<MTEncodeText>~</MTEncodeText>で囲ってあげるだけです。 たとえば、EUC-JPからUTF-8に変換したい場合には以下のようになります。

<MTEncodeText from="<$MTPublishCharset$>" to="utf8">
:
エンコードしたいコード
:
</MTEncodeText>

青い字の部分には各自で使用している文字コードを指定します。省略すると自動認識されるようです。 赤い字の部分にはエンコードしたい文字コードを指定しています。 省力すると各自の環境で使用している文字コード( <$MTPublishCharset$> )が適用されるようです。

わたしのブログはUTF-8なので、逆にEUC-JPに変換した結果をファイルに出力するようなことをやってみたところ、テキストエディタを使ってUTF-8で開いたら文字化けしました。 でも、EUC-JPで開いたらちゃんと正しく文字が読めることを確認しました。

ということで、UTF-8以外の文字コードをお使いの人はこのプラグインを使って、コード変換したいところを上記のように括ってあげれば問題なく使えそうです。

では、SEE YOU

 Trackback Pings(0)

No trackbacks found.

 Comments(11)

#1: Posted by oscar [RES]

こんにちは、bzbellさん。
EUCで苦労しているoscarです。(笑)
MT-I18Nプラグインは便利ですよ~
文字コード変換しつつ、URLエンコードなんてのが出来ますから。非UTF-8サイトでは必須でしょう。
よく他所のサイトのRSSを表示するのに使用してました。

これの残念な点はねぇ・・・、これ再構築時にしか意味を為さないんです。
事前にDBに格納されてるデータをMTタグで出力するような用途でしか有効じゃないんですよ。
事前に表示するデータを用意できる時は良いんですが、動的に読み込んだデータには、効かないんです。当たり前ですけど。

#2: Posted by bzbell [RES]

>>1 oscar さん

こんにちわ^^

> これ再構築時にしか意味を為さないんです。

使い方からしてそんなかんじしてました(; ̄∇ ̄A
でも、

> 動的に読み込んだデータには、効かない

というのはどういうことでしょうか。
ちょと確認程度でしか使ってないのでよく分からないのですが、たとえば、検索結果をAjaxで表示しようとした場合にはエンコードされない…というかんじですか。

もっと根本的な話で、MT標準のUTF-8からEUC-JPなどの文字コードに変更する必要性が分からないんです。
そうせざるを得ない理由があるとは思うのですが…。

#3: Posted by fag [RES]

こんばんは~
>動的に読み込んだデータには、効かない(?)
そうなんですよ。。。
Ajax風なメールフォームで「出来た!出来た!」と うかついてしまいました。。。(変な報告してごめんなさい。)
ページ上はちゃんとUTF-8にされた文字コードがEUC-JPでプレビュー表示されるので出来たと思ってしまったんですが,実際に送られてきたメールは変な文字(\x{fffd}だらけ)になっちゃってて。。。とほほです。

まあ,普通に考えれば当たり前な結果なんですが。。。

#4: Posted by bzbell [RES]

>>3 fag さん

こんにちわ^^

> 実際に送られてきたメールは変な文字(\x{fffd}だらけ)になっちゃってて。。。とほほです。

えぇΣ( ̄Д ̄;)!! そうだったんですかっ!!

ちょとよく分からなくなってきたのでお聞きします。
このプラグインを使用してエンコードした文字はEUC-JPなんですよね( ̄∇ ̄)b

で、送信時にFORMデータをシリアライズ(データを取得して整形)した後で、既存のmt-comments.cgiを実行するわけですが、シリアライズ時に取得した文字はUTF-8とEUC-JPどっちの文字コードなんでしょうか。

わたしの予想ではエンコード後のEUC-JPだと思ってます。
言い換えると、エンコード済み(EUC-JP)の文字をmt-comments.cgiに渡してるので問題ないと思ってました。

どっかの過程でデコード(UTF-8にまた変換)されて、受信したメルはUTF-8の文字をEUC-JPで送信されたから文字化けしてしまう…ということなんでしょうか。

文字コードってやっかいです(-"-;)ムムッ
ちょと本格的にAjaxを勉強する必要ありですね!!
わたし調べてみます(o ̄∀ ̄)

- 追記 -
すいません、エンコードするのはプレビューのときだけですよね。忘れてた(; ̄∇ ̄A

ということは、UTF-8の文字を送信するわけだから、シリアライズ時にエンコードしてあげればうまくいくかも…ということですかね( ̄∇ ̄)b

どちらにしても、コード変換できるJSを探してみます。

#5: Posted by oscar [RES]

そうなんですよ。
フォームへの入力は、直接CGIへ送られちゃうから、UTF-8のままなんです。

たぶんPHPのmb_encode()とかで、変換しながら渡せばイケると思ってるんですけどね。
寄り道しないで、さっさと手を付けなくちゃ。

#6: Posted by bzbell [RES]

>>5 oscar さん

こんにちわ^^

> 寄り道しないで、さっさと手を付けなくちゃ。

そっかぁ!!
oscarさんここのとこで試行錯誤してたんですね( ̄∇ ̄)b
単純に表示(受信)するだけならこのプラグインはOKだけど、データを送るのはNGってことかぁ!!

なるほどぉ( ´・ω・`)フムフム

ところで、こちらのEscape Codec Library: ecl.jsは使えませんか。
サンプルもあります♪

#7: Posted by oscar [RES]

>こちらのEscape Codec Library: ecl.jsは使えませんか。
参考用にBookmarkしてありますよ。
まだ、あまり手を付けてないんで、しばらくかかりそうです。

#8: Posted by bzbell [RES]

>>7 oscar さん

こんにちわ^^

パッとみたかんじでは、文字列を渡したら変換後の文字列を返してくれそうなので、使い勝手良さそうです(●´∀`●)

#9: Posted by fag [RES]

ちわー^^
>こちらのEscape Codec Library: ecl.jsは使えませんか。
おぉ,そんなのあるんですね。すごい。試してみまーす

#10: Posted by bzbell [RES]

>>9 fag さん

こんにちわ^^
> 試してみまーす

お手数おかけします(#^.^#)
よろしくお願いします♪

#11: Posted by fag [RES]

>お手数おかけします(#^.^#)
>よろしくお願いします♪

いえいえ,こちらこそです!
お手数おかけしてます!

 Post a Comment

コメント用フィード