2007年12月23日

PHP+MySQLでの文字エンコーディング設定

UTF-8で統一します。

HTMLファイルのエンコードを以下のように設定します。
HTMLからPHPに渡されるデータはUTF-8になります。
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

さらにmy.cnf(my.ini)に以下のように設定を行います。init_connectを設定することで、クライアントから"SET NAMES utf8"を実行したのと同じことになります。つまり、クライアント→サーバのデータのエンコーディングがUTF-8であることを示します。

[mysqld]
character-set-server = utf8
collation-server = utf8_general_ci
init_connect="SET NAMES utf8"

もしくは、

[mysqld]
default-character-set=utf8
init_connect="SET NAMES utf8"



他に"skip-character-set-client-handshake"というパラメータもあります。これは、クライアントからの文字エンコード指定を無視することになり、もし設定するとinit_connect="SET NAMES utf8"の意味がなくなるので、注意猫

良かったらクリックお願いします→banner_01.gif
posted by 台北猫々 at 12:47| Comment(0) | TrackBack(0) | 技術メモ

ファイルダウンロード処理


/**
* ファイルダウンロード処理
* ダウンロードの際は「Content-Disposition: attachment」により、
* ダウンロードダイアログが表示され、ブラウザのプラグインでは
* 開かないようになります。
* @param filename ファイルのフルパス名
* @return 0:成功 -1:失敗
*/
function download($filename) {
if( !file_exists($filename) ) {
return -1;
}
$filesize = filesize($filename);
header("Content-Disposition: attachment; filename=".basename($filename));
header("Content-Length: " . $filesize);
header("Content-Type: application/octet-stream");
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0,pre-check=0");
header("Pragma: private");

$handle = fopen($filename, "rb");
while (!feof($handle)) {
echo fread($handle, 4096);
flush();
}
fclose($handle);
return 0;
}

良かったらクリックお願いします→banner_01.gif
posted by 台北猫々 at 08:20| Comment(0) | TrackBack(0) | 技術メモ(PHP)