Apache の mod_ext_filter で EUC-JP 補助漢字対策
EUC-JP で Web サイトを構築した場合、IE が EUC-JP で補助漢字をサポートしていないため、他のブラウザで POST される補助漢字が文字化けしてしまいます。
IE でも数値文字参照なら表示ができるので、補助漢字を数値文字参照に置換して表示しましょうという事で、Apache の mod_ext_filter モジュールから呼び出して使えるフィルタースクリプトを作ってみました。
eucjp_jisx0212_filter.pl
httpd.conf に以下を追加 (http://~/wiki に対して適用する例)
LoadModule ext_filter_module modules/mod_ext_filter.so
※Fedora 11 で EUC-JP版 pukiwiki をインストールして確認
Input/Output の両方をフィルタリングしたりEUC-JPエンコーディングのバリデーションチェックを行うための Apache モジュールをどうやれば作れるのかという事を調べていたら mod_ext_filter モジュールがある事がわかり、とりあえず Output Filter だけでも外部スクリプトで作ってみようという事で作って見ました。結構簡単に IE の文字化け回避するためのフィルターを作れてしまいました。
Apache側で処理しているので、Webアプリ側には手を加えなくても良いのはうれしい。
IE でも数値文字参照なら表示ができるので、補助漢字を数値文字参照に置換して表示しましょうという事で、Apache の mod_ext_filter モジュールから呼び出して使えるフィルタースクリプトを作ってみました。
eucjp_jisx0212_filter.pl
#!/usr/bin/perl
use strict;
use warnings;
use Encode 'decode';
my $euc_jisx0212 = '\x8F[\xA1-\xFE][\xA1-\xFE]';
my $euc_jisx0212_tilde = '\x8F\xA2\xB7';
my $fullwidth_tilde = '~';
while () {
s/$euc_jisx0212_tilde/$fullwidth_tilde/go;
s/($euc_jisx0212)/sprintf("%d;", ord(decode('euc-jp', $1)))/geo;
print;
}
httpd.conf に以下を追加 (http://~/wiki に対して適用する例)
LoadModule ext_filter_module modules/mod_ext_filter.so
ExtFilterDefine eucjp_jisx0212_output_filter mode=output \
intype=text/html outtype=text/html \
cmd="/usr/bin/perl /usr/local/bin/eucjp_jisx0212_filter.pl"
<Location /wiki>
SetOutputFilter eucjp_jisx0212_output_filter
</Location>
※Fedora 11 で EUC-JP版 pukiwiki をインストールして確認
Input/Output の両方をフィルタリングしたりEUC-JPエンコーディングのバリデーションチェックを行うための Apache モジュールをどうやれば作れるのかという事を調べていたら mod_ext_filter モジュールがある事がわかり、とりあえず Output Filter だけでも外部スクリプトで作ってみようという事で作って見ました。結構簡単に IE の文字化け回避するためのフィルターを作れてしまいました。
Apache側で処理しているので、Webアプリ側には手を加えなくても良いのはうれしい。