トラックバックの文字化け対策
日本語の文字コードの関係でトラックバックの文字化けってのがいろいろな
ブログツールの開発者を悩ましているが、試行錯誤の結果WordPressでは、
以下のような対策を考えた。
トラックバック送信時
1.charsetパラメータの付加
日本語圏では、charsetをトラックバックPOSTのパラメータに付加する事が
デファクトとなっているようなので、送信する文字コードを指定する。
2.UTF-8での送信オプションの追加
exciteのブログなどではUTF-8以外の文字コードによるトラックバックを
受け付けてくれないので、送信時にUTF-8によるトラックバックを可能にする
オプションを追加
3.Bookmarkletによる投稿時の、ターゲットの文字コード自動判定
Bookmarkletによる投稿時には、一度トラックバックURLの自動取得を目的として
ターゲットのページを読み込むようにしているので、この際に文字コードを
判定して、その文字コードによってトラックバックを送信する。
トラックバック受信時
基本的には以下の2つの方法で受信したトラックバックの文字コードを判定する。
1.charsetパラメータによる文字コード判定
2.mb_detect_encoding関数による文字コード判定
但し、PHPではphp.iniや.htaccess等によりmbstringの設定の違いによって、
charsetパラメータを信用する事がかえって文字化けの原因となる事が
わかってきた。
というのは、設定によってはPHPの方で自動的にPOSTされた文字列の文字コードを
判定して、事前に文字コード変換されてしまうので、これにcharsetパラメータを
参照して文字コード変換すると2重に変換する事になって文字化けが発生してしまう。
特にphp.iniにて、
mbstring.http_input = auto
mbstring.encoding_translation = On
等となっている場合には、この状況となる。
よって、受信時に既に変換済みかどうかを判定する必要が出てくる。
mb_http_input("P")という関数呼び出しによって、POST文字列をどういうcharsetとして
判断して変換したかという事が拾えるので、これらとphp.iniの設定内容を元に、
自動変換するかcharsetパラメータによる変換をするかを判定する事とした。
コメント
コメントの投稿
ごめんなさい、現在コメントを付けることは出来ません
日記更新
きこえる
Comment by のぶのぶ — 2004年7月25日(日) @ 10時39分07秒
テスト
http://www.kowa.org/modules/wordpress/archives/2004/06/20/224/
テストです。
Trackback by M's_Bar — 2005年6月14日(火) @ 22時16分20秒
この文字化け対策はありがたいです。
Comment by 人材派遣労働者 — 2008年2月17日(日) @ 15時24分55秒
htaccessで設定できることを初めて知りました。
Comment by 会社設立したばかり — 2008年6月18日(水) @ 10時07分40秒
サイトで文字化けしていたので大変助かりました。
Comment by 賃貸の大阪home — 2010年12月22日(水) @ 22時49分50秒