• 締切済み

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); ?>

みんなの回答

  • bx2
  • ベストアンサー率47% (97/206)
回答No.2

アクセント付き文字は、UTF-8なら問題なく扱えます。 動作確認していませんが、「$enc_db = "SJIS-win";」にすれば扱えると思います。

Feruza
質問者

お礼

ご回答ありがとうございます。早速、試してみましたが、駄目みたいです。 アクセント付き文字というんですね。下記URIなどでもうちょっと調べてみます。 http://cosmoshouse.com/tools/acc-conv-j.htm

  • nora1962
  • ベストアンサー率60% (431/717)
回答No.1

「Händel」「Chopin, Frédéric François」 どう見てもSHIFT-JISの範囲外の文字(ISO 8859-1ならあるのかな)が入ってますね。 これでは変換できないのでは?

Feruza
質問者

お礼

ご回答ありがとうございます。もう少し調べてみます。

関連するQ&A