Shift-JISの半角英字が正しく表示されない
【Eclipse PDTのバージョン】HELIOS 1.3.0
【XAMPPのバージョン】1.7.4
【OSの種類とバージョン】Windows Vista Business 32bit(x86)版
【ブラウザの種類とバージョン】IE8
【その他環境情報】Apache2.2.17 PHP5.3.5.0 Subversion 1.6.15 WinCacheGrind1.0.0.14
下記プログラムを実行(ExcelデータにODBC接続して抽出)し、ブラウザで表示(UTF-8)させると、一部の半角英字が正しく表示されません。例えば、「Händel」→「Handel」、「Chopin, Frédéric François」→「Chopin, Frederic Francois」、…。OSをLinuxにして、データベースを使用(すべてUTF-8)すると、解決するでしょうか?
<?php
$dsn = "database_4";
$user = "";
$pass = "";
$enc_disp = "UTF-8";
$enc_db = "SJIS";
function cnv_enc($string, $to, $from) {
$det_enc = mb_detect_encoding($string, $from . ", " . $to);
if ($det_enc and $det_enc != $to) {
return mb_convert_encoding($string, $to, $det_enc);
} else {
return $string;
}
}
$conn = odbc_connect($dsn, $user, $pass) or die("接続エラー");
$sql = "SELECT * FROM [music$]";
$res = odbc_exec($conn, $sql) or die("データ抽出エラー");
echo "<table border=\"1\">";
echo "<tr>";
echo "<td>ID</td>";
echo "<td>大分類</td>";
echo "<td>日本語作曲家名</td>";
echo "<td>英語作曲家名</td>";
echo "</tr>";
$music_1_ID = @$_POST['music_1'];
$i=0;
while ($row = odbc_fetch_row($res)) {
if ((int)odbc_result($res, "music_1_ID")==$music_1_ID) {
$composer_ID = (int)odbc_result($res, "composer_ID");
if ($i!=$composer_ID) {
echo "<tr>";
echo "<td>".(int)odbc_result($res, "composer_ID")."</td>";
echo "<td>".cnv_enc(odbc_result($res, "class_1"), $enc_disp, $enc_db)."</td>";
echo "<td>".cnv_enc(odbc_result($res, "composer"), $enc_disp, $enc_db)."</td>";
echo "<td>".cnv_enc(odbc_result($res, "composer_english"), $enc_disp, $enc_db)."</td>";
echo "<td><a href="."music_11.php?No=$composer_ID".">"."作品"."</a></td>";
echo "</tr>";
}
$i=$composer_ID;
}
}
echo "</table>";
odbc_close($conn);
?>
お礼
正しく表示されるようになりました。 おっしゃるとおり、PHPそのものがUTF-8になっていませんでした。 24行目の説明も解りやすかったです。 ありがとうございました。