やりたいこと
Eclipseを使ってPHP開発をしているとき、
print(‘$str_rowName); と自分で出力を指定しているときは日本語が出てくるが、
PDOをつなごうとしてエラーになった(try構文)になったときの
$e->getMessage()は文字化けになってしまう(下コード)
これを直したい
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
try{ $dsn='pgql:dbname=xxxx host=localhost port=5432'; $user = 'yyyy' $password = 'zzz'; $pdo = new PDO($dsn,$user,$password); (正常に接続できたときの処理内容をかく) } catch(PDOException $e){ //エラーメッセージ(ここの部分が文字化け $str = $e->getMessage(); print('Error:' . $err); //終了 die; } |
エラー内容
・エラーになったときの表示が文字化け(下記はコピペできなかったのでイメージ)
1 |
Error: ?????????▼。。 |
これだとどこがエラーになったのかわからないので直す。
調査
・「Eclipse 出力 文字化けを直す」でリサーチ
→ 出力より、Eclipse内の日本語が文字化けする現象を直す方法というのがズラリ
→ Eclipseの初期設定の文字コードはMS932なので、UTF-8に直したほうがいい
→ もともとUTF-8にしたかったのでEclipseの設定を変えてやってみるも出力は変化なし
・下の1)でリサーチしたもの
EclipseがUTF-8でも出力するファイルが「Shift-JIS」で、文字コードが違うため。
phpファイルの冒頭に下記を書いておく
1 |
header('Content-type: text/html; charset=UTF-8'); |
※ただし、HTMLが書いてあるものでないと、意味をなさないことに注意
したがって今回の場合意味無し
・「文字エンコーディング 変換 php」でリサーチ
mb_convert_encording() がTOPに
下の2)を確認して、上記コードの12行目を下記のように書いてみたら正常出力された
1 |
$str = mb_convert_encording($str, 'SJIS','UTF-8'); |
原因
お互いのファイル出力文字コードがちがったため
解決策
mb_convert_encording($str) で、$strに変換したい文字列を入れてから出力すればOK
→よく使うので、関数化して使いまわしたほうがいい
以下は私が作った例
1 2 3 4 5 6 7 |
function convert_encording($str) { //文字コードを変数に登録 $before_encording = 'UTF-8'; $after_encording = 'SJIS'; //変換した文字列を返す return mb_convert_encording($str, $after_encording, $before_encording); } |
参考
1)https://kanda-it-school-kensyu.com/php-intro-contents/pi_ch04/pi_0402/
2)https://www.php.net/manual/ja/function.mb-convert-encoding.php