PHPでシステムを作っています。
HTML内の文字は文字化けせずに表示されるのですが
mySQLから取り出した日本語が文字化けしてしまいます。
文字コードはUTF-8で出来るだけ合わせているつもりです。
この文字化けを直すにはどうしたらよいでしょうか?
以下コード(gyunyu.php)
<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> </head> <body> <p>ほげほげ</p> <?php header("Content-Type: text/html; charset=UTF8");</html>$host = 'localhost'; // 利用するデータベース $dbName = 'xxxxxxxxxx'; // MySQLの DSN 文字列 $dsn = "mysql:host={$host};dbname={$dbName};charset=utf8"; // phpmyadminのユーザー名とパスワード $user = 'xxxxxxxxx'; $password = 'xxxxxxxxxxxxx'; $pdo = new PDO($dsn, $user, $password); // プリペアドステートメントのエミュレーションを無効にする $pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); // 例外がスローされる設定にする $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $sql = "SELECT * FROM Site_Plan2"; $stm = $pdo->prepare($sql); $stm->execute(); $result = $stm->fetchAll(PDO::FETCH_ASSOC); print_r($result); ?> </body>
出力された文字はこちらです。
ほげほげ
Array ( [0] => Array ( [No] => 1 [Meal] => ?? [RoomType] => E [HTML] => ??? ) )
配列内のMealとHTMLに入っている値が文字化けしています。
レンタルサーバーはOCNのメール&ウェブを使っています。
PHPバージョンは5.3
MySQLバージョンは5.5.54
いろいろなサイトを見てUTF-8にしてみました。
以下はmySQL内の文字コードです。
SHOW VARIABLES LIKE 'character_set_%'
Variable_name Value
character_set_client utf8
character_set_connection utf8
character_set_database utf8mb4(もしかしてここが問題?)
character_set_filesystem binary
character_set_results utf8
character_set_server utf8
character_set_system utf8
utf8mb4となっているところが問題かなと思っているのでがここを変更するのは
怖くてできていません。(システムで使用中)
下記はテーブルの文字コード
SHOW TABLE STATUS FROM tablename LIKE 'Site_Plan2'
Collation は utf8mb4_general_ci となっていました。
Httpヘッダーも調べてみましたが
Content-Type: text/html; charset=UTF8
となっていて問題ないと思います。
Httpヘッダーを調べたときに使ったのはFireFox用のアドオンで
Live HTTP Headersというものです。
その他、C#のプログラムから先ほどのテーブル(Site_Plan2)からデータを取り出しましたが
こちらは文字化けしておりません。
長くなってしまいましたがどうかお助けください。
回答4件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/07/05 01:09