« Netscapeの日本サイト消える? | トップページ | KonquerorとJavaScript(特定漢字での動作不良) »

2006/07/11

Konquerorとエスケープ文字(JavaScript謎のエラーを解く)



eMachinesのパソコンは49,800円!【ツクモ】

久々のKonquerorネタです。私が開発しているWEBアプリケーションで、原因不明のJavaScript動作不良がKonquerorでのみ、発生することが分かりました。原因は比較的すぐにわかりました。Konquerorでは、「\」(エスケープ文字)がJavaScriptの中に存在すると、(プラス特定の条件で。その条件は後述します。)「\」がエスケープ文字として解釈されないために、エラーが起こります。

Konquerorで不具合が発生するソースのサンプル:

とあった場合、Konqueror以外のブラウザでは、

a
abc"cdあ
xyzん
x

と表示されますが、Konqueror様(「CentOS 4.3 + Konqueror 3.3.1」「SuSE Linux 10.1 + Konqueror 3.5.1」でテスト。)は違います。

a
xyzん
x

と表示されます。「abc"cdあ」は表示されません。「"」(ダブル・クォート)をエスケープするための「\」が、Shift_JISのページではエスケープ文字として解釈されないためです。EUC-JPやUTF-8のページであれば問題ありません。調子に乗って、IS0-2022-JPのページでも調べましたが、問題ありませんでした。Shift_JISのページでのみ発生するようです。





なぜ、Shift_JISでのみ発生するのか考えてみたのですが、これはCGIをやる人は恐らく一度は見聞きしている文字化けの問題に対応しようとしての副作用でないかと思われます。Shift_JISで書かれたCGI(Perl)で、「能力」「表示」「予定」などをprintすると文字化けします。「能力」は「迫ヘ」に、「表示」は「侮ヲ」、「予定は」は「嵐閧ヘ」、「申請」は「瑞ソ」に文字化けする問題です。詳細は、

●CGIで特定の文字(表・予・申・能など)が文字化けする
http://www.shtml.jp/mojibake/sjis_cgi.html

などを参照してください。

2バイト目に、「0x5C」(\=バックスラッシュ)が存在する文字を含んでいる文字列をprintした場合に、「0x5C」がエスケープ文字として解釈されるため、問題が発生します。ですから、文字化け対策としてKonquerorは、「0x5C」をエスケープ文字として解釈しないようにしているのでしょうが、2バイト文字の2バイト目の「0x5C」と、1バイト文字の「0x5C」(=エスケープ文字として解釈するべき)は区別して処理するべきなのに、区別できていないのが今回の問題の原因ではないかと思われます。

Konquerorでも正しく動作させるためには、

のようにして、「\」を使わないで済むように、「'」(シングル・クォート)で文字列を囲むようにすれば解決できる時もあるでしょうが、「'」と「"」の両方を使わなければならない場合は回避の方法が難しくなります。すべての文字列をString.fromCharCodeでdocument.writeするようにすれば解決できなくはないでしょうが、これはとても一般的な解決法とは言えません。

document.writeする文字列が英数字だけであれば、外部ファイル(*.js)にして、文字コードを指定すれば、「\」も使えるようなりますが、document.writeしたい文字列の中に日本語が混じっていれば即アウトです。

<<Konqueror関連のこれまでの記事>>

● Konquerorで画像の入れ替えJavascriptで不具合が発生するケース
http://shimax.cocolog-nifty.com/search/2005/10/_.html
ロールオーバーが正しく動作しない(少なくとも、期待どおりに動作しない)ケースがあることなどについて説明しています。

● Google Adsense文字化け with Konqueror3.1.5
http://shimax.cocolog-nifty.com/search/2005/05/google_adsense__dd9a.html
Konqueror 3.2.3や3.3.1、3.5.1では発生しないので、特定のバージョンのみの問題かもしれません。



全国配送料無料!!

|

« Netscapeの日本サイト消える? | トップページ | KonquerorとJavaScript(特定漢字での動作不良) »

コメント

コメントを書く



(ウェブ上には掲載しません)


コメントは記事投稿者が公開するまで表示されません。



トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/67411/10892495

この記事へのトラックバック一覧です: Konquerorとエスケープ文字(JavaScript謎のエラーを解く):

« Netscapeの日本サイト消える? | トップページ | KonquerorとJavaScript(特定漢字での動作不良) »