質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

PDO

PDO(PHP Data Objects)はPHPのデータベース抽象化レイヤーです。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

1回答

1289閲覧

mysqlに漢字で保存されているのにphpで表示すると文字化けしてしまいます。

退会済みユーザー

退会済みユーザー

総合スコア0

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

PDO

PDO(PHP Data Objects)はPHPのデータベース抽象化レイヤーです。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2017/07/08 08:44

編集2017/07/08 08:52

select * from kifus
とした時

mysql

1省略 2| 2 | https://kif-pona.heroz.jp/games/toywonder-takion1127-20170705_205420?tw=1 | toywonder | takion1127 | 2017/07/05 | 開始局面<br>1 ▲7六歩(77)<br>2 △3四歩(33)<br>3 ▲6六歩(67)<br>4 △3五歩(34)<br>5 ▲7八銀(79)<br>6 △3二飛(82)<br>7 ▲6七銀(78)<br>8 △3四飛(32)<br>9 ▲7七角(88)<br>10 △1四歩(13)<br>11 ▲8八飛(28)<br>12 △8二銀(71)<br>13 ▲2八銀(39)<br>14 △7二金(61)<br>15 ▲4八玉(59)<br>16 △6二玉(51)<br>17 ▲8六歩(87)<br>18 △3六歩(35)<br>19 ▲同歩(37)<br>20 △同飛(34)<br>21 ▲3七歩打<br>22 △3四飛(36)<br>23 ▲8五歩(86)<br>24 △4二銀(31)<br>25 ▲5八金(69)<br>26 △3三桂(21)<br>27 ▲5六銀(67)<br>28 △1三角(22)<br>29 ▲1六歩(17)<br>30 △4四歩(43)<br>31 ▲6五歩(66)<br>32 △4三銀(42)<br>33 ▲8四歩(85)<br>34 △同歩(83)<br>35 ▲同飛(88)<br>36 △8三銀(82)<br>37 ▲8六飛(84)<br>38 △8四歩打<br>39 ▲3八玉(48)<br>40 △5二金(41)<br>41 ▲4八金(49)<br>42 △7一玉(62)<br>43 ▲9六歩(97)<br>44 △9四歩(93)<br>45 ▲6六角(77)<br>46 △6二金(52)<br>47 ▲7五歩(76)<br>48 △2四角(13)<br>49 ▲7七桂(89)<br>50 △5四銀(43)<br>51 ▲2六歩(27)<br>後手時間切れ

と漢字で表示はされているものの、

php

1echo "<TD>".$row['sashite']."</TD>";

をするとブラウザでは

�J�n�ǖ�
1 ��7�Z��(77)
2 ��3�l��(33)
3 ��6�Z��(67)
4 ��3�ܕ�(34)
5 ��7����(79)
6 ��3���(82)
7 ��6����(

のように文字化けして表示されてしまいます。

色々と調べては見たもののどれもうまく行きませんでした。
参考 https://goo.gl/BprVP7

現状のコード

php

1<!DOCTYPE html> 2<html lang="ja"> 3<head> 4<meta charset="UTF-8"> 5<title>url_form</title> 6<!-- <link rel="stylesheet" href="style.css"> --> 7</head> 8<body> 9<?php 10//URLの取得 URLがない場合エラー 11$url = $_POST['url']; 12if(!isset($url)){ 13// if(!isset($_GET['url'])){ 14 statusFailure(); 15} 16$html = file_get_contents($url); 17// 日時取得 18 function date_get_converter($source_code){ 19 $date_pattern = "/\d{8}/u"; 20 preg_match($date_pattern, $source_code, $date_matches); 21 $date_split = preg_split("//u", $date_matches[0], -1, PREG_SPLIT_NO_EMPTY); 22 array_splice($date_split, 4, 0, "/"); 23 array_splice($date_split, 7, 0, "/"); 24 $date_convert = implode("", $date_split); 25 return $date_convert; 26 } 27 28 // 先手の名前表示 29 function sente_name_get($source_code){ 30 $sente_pattern = "/棋譜\(.*(級対|段対)/u"; 31 preg_match($sente_pattern, $source_code, $sente_matches); 32 $sente_name_get = mb_substr($sente_matches[0], 3, -3, "utf-8"); 33 return $sente_name_get; 34 } 35 // 後手の名前取得 36 function gote_name_get($source_code){ 37 $gote_pattern = "/(級対|段対).*\d(級|段)/u"; 38 preg_match($gote_pattern, $source_code, $gote_matches); 39 $gote_name_get = mb_substr($gote_matches[0], 2, -2, "utf-8"); 40 return $gote_name_get; 41 } 42 43 44// 日時表示 45 $date = date_get_converter($html); 46 echo "開始日時:".$date." "; 47 48 49// 先手の名前表示 50 $sente_name = sente_name_get($html); 51 echo "<br>先手:".$sente_name; 52 53// 後手の名前表示 54 $gote_name = gote_name_get($html); 55 echo "<br>後手:".$gote_name."\n"; 56 57 echo"<br>手数--指し手---消費時間--<br>"; 58 59//PhantomJSの実行 60$cmd = 'phantomjs phantomjs-get-html.js ' . $url; 61exec($cmd, $arr); 62 63// データがない場合エラー 64if(!$arr){ 65 statusFailure(); 66} 67 68// https://kif-pona.heroz.jp/games/toywonder-takion1127-20170705_205420?tw=1 69// var_dump($arr); 70//文字列結合 71// カンマを開業に変換する 72$comma_pattern = '/,/'; 73$newline_replacement = '<br>'; 74// 先後表示の三角置換 75// $sengo_pattern = '/(▲|△)/u'; 76// $delete_replacement = ''; 77foreach($arr as $val){ 78 // カンマを開業に変換する 79 $kifu = preg_replace($comma_pattern, $newline_replacement, $val); 80 // 先後表示の三角削除 81 // $kifu = preg_replace($sengo_pattern, $delete_replacement, $kifu); 82 echo $kifu; 83} 84 85define('DB_DATABASE', 'kifusave_app'); 86define('DB_USERNAME', '****'); 87define('DB_PASSWORD', '****'); 88define('PDO_DSN', 'mysql:dbname=' . DB_DATABASE . ';host=127.0.0.1;charset=utf8'); 89 90echo "<TABLE border='1' >"; 91echo "<TR>"; 92echo "<TD>ID</TD>"; 93echo "<TD>URL</TD>"; 94echo "<TD>先手</TD>"; 95echo "<TD>後手</TD>"; 96echo "<TD>日付</TD>"; 97echo "<TD>棋譜</TD>"; 98echo "</TR>"; 99// echo "</table>"; 100 101try { 102 $search_sql = "select * from kifus where url"; 103 // connect 104 105 $db = new PDO(PDO_DSN, DB_USERNAME, DB_PASSWORD, $options); 106 $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 107 108 $stmt = $db -> query("SET NAMES utf8;"); 109 // connect-ok 110// dbにデータ保存 111 $stmt = $db->prepare("insert into kifus (url, sente_name, gote_name, datetime, sashite) values (:url, :sente_name, :gote_name, :datetime, :sashite)"); 112 113 $stmt->bindParam(':url', $url, PDO::PARAM_STR); 114 $stmt->bindParam(':sente_name',$sente_name, PDO::PARAM_STR); 115 $stmt->bindParam(':gote_name',$gote_name, PDO::PARAM_STR); 116 $stmt->bindParam(':datetime',$date, PDO::PARAM_STR); 117 $stmt->bindParam(':sashite',$kifu, PDO::PARAM_STR); 118 $stmt->execute(); 119//dbにデータ保存完了 120 121 $sql = 'select * from kifus'; 122 $sql_null_delete = 'delete from kifus where url is NULL'; 123 $db->query($sql_null_delete); 124 foreach ($db->query($sql) as $row) { 125 echo "<TR>"; 126 echo "<TD>".$row['id']."</TD>"; 127 //列2を出力////////////// 128 // echo "<TD><a href=" . $row[1].">".$row[1]."</a>"; 129 echo "<TD><a href=".$row['url'].">".$row['url']."</a></TD>"; 130 echo "<TD>".$row['sente_name']."</TD>"; 131 echo "<TD>".$row['gote_name']."</TD>"; 132 echo "<TD>".$row['datetime']."</TD>"; 133 echo "<TD>".$row['sashite']."</TD>"; 134 echo "</TR>"; 135 } 136echo "</TABLE>"; 137 138 139 $db = null; 140 141} catch (PDOException $e) { 142 echo $e->getMessage(); 143 exit; 144} 145?> 146<p><a href= "http://127.0.0.1:8000/">戻る</a></p> 147</body> 148</html>

mysql

1mysql> show variables like "chara%"; 2+--------------------------+------------------------------------------------------------+ 3| Variable_name | Value | 4+--------------------------+------------------------------------------------------------+ 5| character_set_client | utf8 | 6| character_set_connection | utf8 | 7| character_set_database | utf8 | 8| character_set_filesystem | binary | 9| character_set_results | utf8 | 10| character_set_server | utf8 | 11| character_set_system | utf8 | 12| character_sets_dir | /usr/local/Cellar/mysql@5.6/5.6.36_1/share/mysql/charsets/ | 13+--------------------------+------------------------------------------------------------+ 148 rows in set (0.05 sec)

わがままですが、pdoで解決したいと思っています。
ご教授願います。m(__)m

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

先頭部分で

header('Content-Type: text/html; charset=UTF-8');

と入れて見るとどうなるでしょうか?

投稿2017/07/08 09:19

yoorwm

総合スコア1305

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2017/07/12 05:09

回答ありがとうございます。 文字化け治りました。助かりました。ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問