プロ・クリエータの実践ウェブテクニック集



外部ファイルの文字コードを変更できない場合の対処法

 Flash は、UTF-8 (または Shift_JIS) 以外の日本語文字コードで作成された外部ファイル読み込むと文字化けを発生します。

 何らかの事情で外部ファイルの文字コードを変更できない場合は、PHP や CGI で UTF-8 (または Shift_JIS)に変換したデータを出力させて読み込みます。 PHP の場合は、mb_convert_encoding() で変換すると良いでしょう。

 *注 データの出力以前に他のいかなる出力も行ってはなりません。

データがURL形式の場合

query.txt (読む込むデータ)

name=data1&addr=data2&tel=data3

query.php (Flash から起動する phpスクリプト)

<?php $file = 'query.txt'; $handle = fopen($file, 'r') or die(); $query = fgets($handle); fclose($handle); $query = mb_convert_encoding($query, 'UTF-8', 'auto'); print($query); ?>

query.fla (ActionScript の記述)

// _root // └addr_mc // └data_mc // └name, addr, tel (Dynamic Text) // MC of addr_mc onClipEvent(load) { this.loadVariables('query.php'); // this.name, this.addr, this.tel にそれぞれの値が読み込まれます。 } onClipEvent(data) { this.data_mc.name = this.name; this.data_mc.addr = this.addr; this.data_mc.tel = this.tel; }

データがCSV形式の場合

data.txt (読む込むデータ)

name1,addr1,tel1 name2,addr2,tel2 name3,addr3,tel3

data.php (Flash から起動する phpスクリプト)

<?php $file = 'data.txt'; $data = array(); $string; $handle = fopen($file, 'r') or die(); while(!feof($handle)) { $data[] = fgets($handle); } fclose($handle); $string = implode(';', $data); $string = mb_convert_encoding($string, 'UTF-8', 'auto'); print("data=$string"); ?>

data.fla (ActionScript の記述)

// _root // └addr_mc // └data_mc // └name, addr, tel (Dynamic Text) // MC of addr_mc onClipEvent(load) { this.loadVariables('data.php'); // this.data に値が読み込まれます。 } onClipEvent(data) { lines = new Array(); line = new Array(); lines = this.data.split(';'); for(i in lines) { line = lines[i].split(','); mc = 'data_mc' + i; this.data_mc.duplicateMovieClip(mc, i); this[mc].name = line[0]; this[mc].addr = line[1]; this[mc].tel = line[2]; this[mc]._y = (this.data_mc._y + this.data_mc._height) * i; } }