MySQL+PHP 掲示板での文字化けについて
お世話になります。
教えて!内でも同類の質問を多々目にし、一通り目を通したつもりですが、今回自力解決することができなかったため質問しました。
MySQL+PHPで簡易掲示板を設置しました(とりあえず動作確認させたかったので書籍のサンプルです)。
しかし、投稿後の画面が文字化けしてしまいます。
日本語で投稿した場合、全て「????」と表示されます。
データベースへ直接アクセスすると、レコードも「????」で登録されていることから、登録の際の文字コードに問題があるのかと思い色々試したのですが、上手くいきませんでした。
掲示板はform1.htmlで文章を入力後、DBに登録され、sample.phpで値を表示するシンプルなものです。
以下がソースですが、色々修正したため、根本的におかしい箇所もあるかも知れませんが、気になる箇所・解決策などご教示宜しくお願いします。
form1.html
------------------------
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type"
content="text/html; charset=utf-8">
<title>form1</title>
</head>
<body>
<form action='sample.php' method='GET'>
題名:<input type="text" name="title" size=60 />
<br/>
要約:<textarea name="abstract" cols=60 rows=2></textarea>
<br/>
本文:<textarea name="content" cols=60 rows=10></textarea>
<br/><br/>
<input type="submit" value="送信"/>
</form>
</body>
</html>
------------------
sample.php
------------------
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>PHP Sample</title>
<style>
h3{
font-weight:bold;
border-style:none none solid solid;
border-width:0px 0px 3px 7px;
border-color:#0000ff;
padding:5px 0px 0px 0px;
color:#000066;
background-color:#ddddff;
width:90%;
}
h4{
width:90%;
margin-left:5%;
}
p{
border-style:groove groove groove groove;
border-width:3px 3px 3px 7px;
border-color:#aaaaff;
margin-left:5%;
padding:5px 5px 5px 5px;
color:#000033;
background-color:#eeeeff;
width:80%;
}
h6 {
text-align:right;
width:85%;
}
</style>
</head>
<body>
<?php
$link = mysql_connect("localhost", "root", "root") or exit("接続に失敗しました。");
mysql_select_db("phpdata") or exit("データベースが選択できません。");
if (!isset($_GET["title"])){
showAllMySQLData(NULL);
exit;
}
$title = htmlspecialchars($_GET['title']);
$abstract = htmlspecialchars($_GET['abstract']);
$content = htmlspecialchars($_GET['content']);
$query = "insert into myblog (title,abstract,content,uptime)";
$query .= " values (\"" . $title . "\",\"" . $abstract . "\",\"" . $content . "\",CURDATE())";
$result = mysql_query($query) or exit("クエリーの実行に失敗しました。");
mysql_query('set names utf-8');
showAllMySQLData(NULL);
mysql_close($link);
function showAllMySQLData($result){
if ($result == NULL){
$result = mysql_query("SELECT * FROM myblog") or exit("SELECTの実行に失敗しました。");
}
while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
$id = $row['id'];
$title = $row['title'];
$abstract = $row['abstract'];
$content = $row['content'];
$content = preg_replace("/\r\n/","<br/>",$content);
$uptime = date('Y年 m月 d日',strtotime($row['uptime']));
echo "<h3>" . $title . " <font size=-1>[" . $id . "]</font></h3>";
echo "<h4>" . $abstract . "</h4>";
echo "<p>" . $content . "</p>";
echo "<h6>" . $uptime . "</h6>";
echo "<br/><br/>";
}
}
?>
</body>
</html>