たびたび失礼します.bonboと申します.
PHPMyAdminのデータベースに関して質問させていただきます.
PHPで,データベースにアカウントを作成するコードを組みました.
コード:
<!DOCTYPE html>
<?php
header('Content-Type: text/html; charset=UTF-8');
echo '文字化けしない';
?>
</br>
<?php
//mysqliクラスのオブジェクトを作成
$mysqli = new mysqli('xxx.xxx.xxx.xxx', '**********', '**********', '*********');
//エラーが発生したら
if ($mysqli->connect_error){
print("接続失敗:" . $mysqli->connect_error);
exit();
}
$flag_name=0;
?>
</br>
<html>
<head>
<meta charset="UTF-8" />
<title>テストページ</title>
</head>
<body>
<?php
//_pass_wordがPOSTされているなら
if(isset($_POST["_pass_word"])&&$_POST["_pass_word"]!=NULL){
//エスケープしてから表示
$pen_name = htmlspecialchars($_POST["pen_name"]);
$mail = htmlspecialchars($_POST["mail"]);
$_pass_word = htmlspecialchars($_POST["_pass_word"]);
print("登録名「 ${pen_name} 」");
print("メールアドレス「 ${mail} 」");
print("パスワード「 ${_pass_word} 」です。");
//プリペアドステートメントを作成 ユーザ入力を使用する箇所は?にしておく
$stmt = $mysqli->prepare("INSERT INTO datas (pen_name, mail_address, pass_word) VALUES (?, ?, ?)");
//?の位置に値を割り当てる
$stmt->bind_param('sss', $_POST["pen_name"], $_POST["mail"], $_POST["_pass_word"]);
//実行
$stmt->execute();
} else {
?>
<p>コメントしてください。</p>
<form method="POST" action="post.php">
なまえ <input value="ほげhogeほげ" name="pen_name" /></br>
登録アドレス<input name="mail" /></br>
パスワード <input name="_pass_word" /></br>
<input type="submit" value="送信" /></br>
</form>
<?php
}
?>
</body>
</html>
コードからPHPMyAdminに接続し,データベースに情報を保存することはできたのですが,
データベースに日本語を送信した際,文字化けが起こってしまいます.
例えば,
「ほげhogeほげ」
が
「ã»ã’hogeã»ã’」
になってしまいます.
datesのpen_nameという要素は
text型
照合順序はutf8_general_ci
です.(utf8_unicode_ciにしても結果は同じでした)
この文字化けを解決したいです.
[知りたいこと]
・文字コードは何になっているのか
ほげ→ã»ã’になる文字コードは何か
・どの段階でUTF-8じゃなくなってるか
post.php上での文字コードはUTF-8で
phpMyAdmin上の文字コードはUTF-8(のはず)
どの段階で文字コードが換わってしまったのか.
・my.iniの場所(そもそも在るのか?)
どうやらxamppでphpmyadminを動かしている方はxampp/mysql/bin/my.ini
などにあるmy.iniを書き換えることで解決しているようなのですが,
私はxamppを使っていないのでmy.iniがどこに在るのか,そもそも在るのかどうか
わかりません.
[ 環境 ]
OS:windows7(32bit)
サーバーはさくらVPSを利用しています.
コンソールの操作,アップロード等はRLogin(32bit)を使っています.
PHPファイルはサクラエディタで編集し、すべてUTF-8で保存しました.
ブラウザはInternet ExplororとGoogle Chlomeで試しました.