2005年11月02日
川俣晶の縁側ソフトウェア技術雑記total 3821 count

ブラウザ間非互換性: Safari2において、不適切なエスケープシーケンスを使ったISO-2022-JPのHTML文書の解釈を誤る

Written By: 川俣 晶連絡先

 ISO-2022-JPを用いて記述されたHTML文書を扱う際、これに含まれるエスケープシーケンスが不適切であると、Safari2は致命的に文書解釈を誤り、JavaScriptのコードの実行に失敗する場合があります。この場合、出るはずのないエラーメッセージを表示させる等の誤動作を行います。

検証プログラム §

(力尽きたので略。「電子小説・Ajax読書プログラム テストNo.1」でスクリプトエラーが発生していた原因がこれに該当)

詳細 §

 ISO-2022-JPは、2バイト文字から1バイト文字に移行するための2つのエスケープシーケンスを持っています。以下の2つがそれにあたります。(C表記)

const char * ASCII = "\33(B";

const char * JISX0201 = "\33(J";

 この場合、一般的にはASCIIを使うのが正当です。

 しかし、JISX0201を使っていて、その後ASCIIを使ってASCIIモードに戻していない場合、Safariは誤動作するようです。

 通常、入手できるツールは、ASCIIに戻すので問題ありません。

より詳細な原因 §

 他人が読んでも意味のない世界ではありますが、うちの内部ツール(非公開=公開する意味がないほど個人用)に、HTMLのプリプロセサのhtmlpp2というものがあります。これが、ASCIIではなくJISX0201を使ってコードを戻していました。

 これが、「電子小説・Ajax読書プログラム テストNo.1」でスクリプトエラーが発生した直接的な原因です。

 とはいえ、これが間違いかというと、あながちそうとも言い切れない面が残るのが悩ましいところです。なぜなら、ASCIIに戻した場合、そのあとの0x5cはバックスラッシュ扱いになるわけですが、書かれた文書の意図は円記号です。それを考えると、JISX0201に戻したい気持ちが起こるのも、理がないとは言えません。

 ちなみに、なぜhtmlpp2がISO-2022-JPに変換しているのかと言えば、まだNetscape Navigator 2.xなどが使われている時代に、それが最も安全と言われていたためで、現代の事情にはマッチしていません。全面的な切り替えのための時間がないので、放置されているだけという情けない状況です。

Facebook

このコンテンツを書いた川俣 晶へメッセージを送る

[メッセージ送信フォームを利用する]

メッセージ送信フォームを利用することで、川俣 晶に対してメッセージを送ることができます。

この機能は、100%確実に川俣 晶へメッセージを伝達するものではなく、また、確実に川俣 晶よりの返事を得られるものではないことにご注意ください。

このコンテンツへトラックバックするためのURL

http://mag.autumn.org/tb.aspx/20051102223138
サイトの表紙【技術雑記】の表紙【技術雑記】のコンテンツ全リスト 【技術雑記】の入手全リスト 【技術雑記】のRSS1.0形式の情報このサイトの全キーワードリスト 印刷用ページ

管理者: 川俣 晶連絡先

Powered by MagSite2 Version 0.36 (Alpha-Test) Copyright (c) 2004-2021 Pie Dey.Co.,Ltd.