« Mac版IEとGoogle Adsenseのテキスト広告(「'CCAX_BT'は定義されていません」エラーの理由) | トップページ | Mac版IEとAmazonおまかせリンク »

2006/09/25

SafariとGoogle AdSense(糸編の漢字が大量出現し、文字化けする場合)





上の広告が、Safariでは下記のように、糸編の感じが大量出現した形での文字化けをする場合があります。



この文字化けは、ココログのようにUTF-8の文字コードのページでは起こりません。ページがShift_JISやEUC-JPのページの場合にのみ起こります。ページがShift_JISのページであるにもかかわらず、Shift_JISのページであるという情報がSafariではGoogleサーバに送られないために、GoogleサーバはデフォルトのUTF-8の文字コードで広告用文字列を返すため、文字化けが起こります。Shift_JISのページにUTF-8の広告が挿入されるのですから、当然と言えば当然に文字化けします。

では、なぜ、Shift_JISのページであるという情報がSafariではGoogleのサーバに送信されないのでしょうか? それはSafariでは、JavaScriptのdocument.charset及びdocument.characterSetのどちらもサポートしていないためです。現在使われているメジャーなブラウザで、document.charsetもdocument.characterSetもサポートしていないのは、もはやSafariだけです。

--- 2007年6月16日20時45分ごろ追記start ---
Safari 3.0 betaが2007年6月にリリースされましたが、3.0 betaでは、このdocument.charsetもdocument.characterSetもついにサポートされるようになりました。Windows版でもMac版でも確認しました。
--- 2007年6月16日20時45分ごろ追記end ---

下記の一覧表(Shift_JISのページでテスト)をご参照ください。



[PR]音楽再生・動画再生ならリアルプレーヤープラス!

ブラウザ名JavaScript返ってきた文字コード
(大文字小文字の違いはそのまま)
IE7document.charsetshift_jis
IE6document.charsetshift_jis
IE5.5document.charsetshift_jis
Sleipnir 2.47(IE6エンジン)document.charsetshift_jis
Sleipnir 2.47
(Geckoエンジン)
document.characterSetShift_JIS
Firefox 1.5.0.7document.characterSetShift_JIS
Opera 9.02document.charsetshift_jis
Opera 9.02document.characterSetshift_jis
Opera 8.54--不明(文字化けなし)
Netscape 7.1document.characterSetShift_JIS
Netscape 6.1
(ビルド日時:20010726)
document.characterSetShift_JIS

Mac IE 5.2.3document.charsetx-sjis
Mac IE 5.1.7document.charsetx-sjis
Mac IE 5.0document.charsetx-sjis
Safari 2.0.4(Tiger 10.4.7)--不明広告が文字化け
Safari 1.3.2(Panther 10.3.9)--不明広告が文字化け
Mac Firefox 1.5.0.7document.characterSetShift_JIS
Mac Opera 9.02document.charsetshift_jis
Mac Opera 9.02document.characterSetshift_jis
Mac Opera 8.54--不明(文字化けなし)
Mac Netscape 7.1document.characterSetShift_JIS
iCab 3.03document.charsetShift_JIS
Konqueror 3.3.1--不明広告は、何も表示されません
Linux Firefox 1.5.0.7
(CentOS 4.4)
document.characterSetShift_JIS
Linux Opera 9.02document.charsetshift_jis
Linux Opera 9.02document.characterSetshift_jis
Linux Opera 8.01--不明(文字化けなし)
Linux SeaMonkey 1.04document.characterSetShift_JIS


Operaがdocument.charsetやdocument.characterSetをサポートしたのはつい最近のバージョン9.0xになってからですが、バージョン8.5x時代でも文字化けはしませんでした。Operaでは、旧バージョンでも、複数の文字コードが混合したページを意図おどおりに表示させることに長けたブラウザであったことが分かります。Opera 9.0xになって、いきなり両方をサポートする離れ業をやりとげたんですね、Operaは。普通は片方しかサポートしていないものなのに。あたかも、window.attachEventとwindow.addEventListenerの両方をサポートするようになったときと同じように。

Safariでも将来的にdocument.charsetもしくはdocument.characterSetをサポートする可能性は十分にあると思いますが、何か対策がないものか考えてみました。

1.Google AdSense側が、パラメータとして、そのページの文字コードを設定できるように改良する。(設定がない場合は、今までどおりJavaScriptによる自動取得がなされるタイプで良いと思います。中級者・上級者用設定を準備してほしいという要望になります。)
 大手の新聞社では、「google_encoding = 'euc-jp';」などと設定されたGoogleのテキスト広告が使われているのを見たことがあります。これが大手の新聞社だからではなく、「一般のサイトでも利用可能なパラメータなのに、私の広告タグ生成手順に問題があるために、これができていない」とすると、本記事は全くの無意味な記事になります。その場合は、大変申し訳ないです。「お騒がせしました。」というしかありません。

2.Google AdSense側が、日本語をそのままJSファイルの中に含めるのではなく、String.fromCharCodeや数値文字参照を使って、英数字だけのJSファイルになるように改良してくれることを期待して、待ちます。「あいうえお」とすべきところを「あいえうお」のようにします。これであれば、どの文字コードでも、文字化けしません。

3.実は、Google AdSenseの広告でも、JSファイルを細かく分析すれば、文字コードに関するパラメータがどのように取得されて、どのようにGoogleサーバに送信されているかは分かりますので、パラメータを手動で渡すことは不可能ではなく、実際できましたが、広告タグの改変にあたる可能性が「大」ですので、この方法の説明は致しません。やるべきではありません。

今回の問題は、2001年にリリースされたNetscape 6.1でさえサポートするdocument.characterSetをサポートしていないSafariに根本的な問題があるとも言えますが、document.characterSetをサポートしていなければバグであるという定義がどこかにあれば別ですが、私は、この問題はGoogle側で解消すべき問題のように感じます

 ただし、私が知らないだけで、実は、文字コードのパラメータ設定がGoogle AdSenseの管理者メニューでできるように最初からなっているのでしたら、申し訳ないです。

なお、この糸編の漢字が大量出現するパターンの文字化けは、UTF-8で書かれた文字列を無理やりShift_JISとして読もうとした結果ですが、こ文字化けの詳細メカニズムについては、
●Googleの検索結果サマリーが文字化け
http://www.shtml.jp/mojibake/google.html

も参照してください。

また、Safariでも、UTF-8で書かれたブログなどでは、このテキスト広告も文字化けしません。また、EUIC-JPのページにGoogle AdSenseのテキスト広告を貼り付けた場合のSafariの文字化けパータンは、Shift_JISのページでの文字化けパターンとはやはり異なります。糸編の漢字はそんなには出てきません。(参照:「EUC-JPのページでのdocument.charset及びdocument.characterSet」)

さらに、iframeをdocument.writeする形の広告では、ページ本体の文字コードと広告の文字コードが別々でも問題がないため、Safariでも文字化けは発生しません。下記の広告(代替広告が表示されていなければ)はGoogle AdSenseのiframeタイプですが、このタイプの広告については、ページ本体がどの文字コードでも、Safariで文字化けすることはありません。

|

« Mac版IEとGoogle Adsenseのテキスト広告(「'CCAX_BT'は定義されていません」エラーの理由) | トップページ | Mac版IEとAmazonおまかせリンク »

コメント

コメントを書く



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


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



トラックバック

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

この記事へのトラックバック一覧です: SafariとGoogle AdSense(糸編の漢字が大量出現し、文字化けする場合):

« Mac版IEとGoogle Adsenseのテキスト広告(「'CCAX_BT'は定義されていません」エラーの理由) | トップページ | Mac版IEとAmazonおまかせリンク »