質問: $code;" ``` 取得したいデータで、日本語のカラムが入るテーブルがあるため、現状カラム名を半角英数字に書き換えないとデータがうまく取得できない状態となっています(カラムを英数字に書き換えるとうまく取得できます)。 ### 2. 環境依存文字(ローマ数字)を出力した際に、どうしても文字化けが起きる。 MDBファイル上のデータに、ローマ数字(I~V)を含んだ値があり、MDBファイル上では文字化けしていないのですが、PDOを使って出力した際に、"?"などに文字化けして正しく表示されません。文字参照を使ってpreg_replaceで置き換えると、ブラウザ上は正しく表示されるのですが、ファイルをダウンロードさせてtxtファイルにて出力した際に、文字参照のまま表示されてしまいます。 やったこと ・元のエンコードを調べるために、var_dump(mb_detect_encoding($hoge))とした → falseとなり、認識できなかった。 ・mb_convert_encoding($hoge,"SJIS","auto")から変換先、変換後をあらゆる通りで試した。 以上、2つの点について解決方法をご存知の方、よろしくお願い致します。
回答: PDOでAccessにアクセスするというようなトリッキーなことはしたことがないのですが、 考えられる原因としては、 mb_detect_encoding() は厳密には「文字エンコーディングを検出する」ものではないということ。 より正確に検出するためには、第2引数、第3引数を設定することです。 ``` var_dump(mb_detect_encoding($hoge)) ``` これでは第1引数しか指定していないので、精度は高くないです。 ``` mb_convert_encoding($hoge,"SJIS","auto") ``` Windowsで扱われる文字コードは `SJIS` ではなく、`SJIS-win` です。