パスワードを忘れた? アカウント作成
320581 journal

Livingdeadの日記: フラッシュコンテンツの中からリクエストされるURLがShift-JISをそのままURLエンコーディングした物って 3

日記 by Livingdead

フラッシュコンテンツがFirefoxとChromeでは閲覧できるのにInternet Explorer 8では閲覧できないという相談を受けた。LiveHTTPHeadersやMicrosoft Network Monitorなどで覗いてみると、どうやらフラッシュコンテンツの中からリクエストされるURLがShift-JISをそのままURLエンコーディングしたものになっているようだ。作成者にIRIという概念はないのか?はたまた設置先としてIISしか想定していなかったのか?

コンテンツの中身を触ることはできないので、サーバ側のPHPスクリプトを改変することで対応する方法があれば教えて欲しいとのこと。mb_check_encodingではうまく判定してくれなかったので、mb_convert_stringを使うことにした。Shift-JISと仮定してUTF-8に変換、再度Shift-JISにラウンドトリップして元に戻ればShift-JISだったんだろうというざっくりした判定。

#!/usr/bin/php
<?php
$utf8_string = urldecode("%E5%AE%89%E5%85%A8/%E5%8C%96%E5%AD%A6%E3%83%97%E3%83%AD%E3%82%BB%E3%82%B9%E3%81%AE%E5%AE%89%E5%85%A8");
$s = $utf8_string;
$su = mb_convert_encoding($s, "UTF-8", "Shift-JIS");
$sus = mb_convert_encoding($su, "Shift-JIS", "UTF-8");
if ($s == $sus) {
  echo "Shift-JIS\n";
} else {
  echo "UTF-8\n";
}
$sjis_string = urldecode("%88%C0%91%53/%89%BB%8A%77%83%76%83%8D%83%5A%83%58%82%CC%88%C0%91%53");
$s = $sjis_string;
$su = mb_convert_encoding($s, "UTF-8", "Shift-JIS");
$sus = mb_convert_encoding($su, "Shift-JIS", "UTF-8");
if ($s == $sus) {
  echo "Shift-JIS\n";
} else {
  echo "UTF-8\n";
}
?>

判定できているようだ。教育用に許諾を得て借りてきたeラーニングコンテンツを部局内のウェブアプリケーション内に組み込むテストというお仕事。

この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。
  • by morphine (11232) on 2011年04月26日 15時18分 (#1942987) 日記

    http://kb2.adobe.com/jp/cps/228/228624.html [adobe.com]

    >また、Macromedia Flash Player 6 以降で は、再生する Flash ムービー (swf) のバージョンによって、エンコーディングの扱いを「Shift-JIS」にするか「UTF-8」にするか自動的に判断して切り替えます。

    とあるとおり、作成者が意図的に環境を判断し文字コードを変更することは、基本的にはできません。
    出来ることと言ったら、
    System.useCodepage = true
    にする程度。

    なので、おそらく System.useCodepage = true にしていたんだと思いますが、それは作者の手抜きではなく、Flash自体の問題かなと。

    • by Anonymous Coward
      古いムービーを再生するために古いバージョンのプレーヤーを丸々抱えてるような構造らしいんですよね、Flash Playerって。やっぱり本気で互換性を保とうと思ったらそこまでしないとならんのか。
  • by Anonymous Coward on 2011年04月26日 10時47分 (#1942741)
    とりあえずぐぐってみたら [google.com]わりと高い制度で特定できてしまいますからまさか本物の文字列をそのまま使ってるなんてことはありませんよね。
typodupeerror

192.168.0.1は、私が使っている IPアドレスですので勝手に使わないでください --- ある通りすがり

読み込み中...