アプリ版:「スタンプのみでお礼する」機能のリリースについて

文字化けが解決できません

使用データベースはSQLServer2008です
対象カラムはcharです
データベースの照合順序はJapanese_CI_ASです

ブラウザのエンコードをUTF-8にするとprint_r($row);の部分は文字化けせずに表示
されますprint("砂糖");は文字化けします
ブラウザの標準文字コード??SJISだとprint_r($row);文字化けします
print("砂糖");は文字化けしません

ということはSQLServerのデータの文字コードがUTF-8ということなのでしょうか
SJISだと思うのですが。
そこで、SQLServerがUTF-8だと仮定してprint_r(mb_convert_encoding($row, "SJIS","UTF-8"));
というプログラムを書いたのですが結果は同じでブラウザのエンコードをSJISにすると
文字化けしていまいます


どうすればブラウザのエンコードがSJISで文字化けしないようになるのでしょうか
教えてください。
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=Shift-SJIS">
<title>test</title>
</head>
<body>

<?php
try{

$dsn ='sqlsrv:server=.\sqlexpress;database=sample';
$dbname = "sample";
$user = "sa";
$password ="manager";
//$dbh = new PDO("mssql:host=.\\SQLEXPRESS;dbname=sample",$user,$password);
$dbh = new PDO($dsn,$user,$password);


$stmt = $dbh->prepare("select * from shohin");
$stmt->execute();
while($row = $stmt->fetch()){
//print_r($row);
//print_r(mb_convert_encoding($row, "SJIS","UTF-8"));
print_r($row);
}
unset($dbh);
unset($stmt);
// foreach($dbh -> query($sql) as $row)
// print($row["id"]);
// print($row["name"]);
// echo "接続できました";
// }
// $dbh = null;

print("砂糖");
}catch(PDOException $e){
print("Failed to get DB handle:aaakkka".$e->getMessage()."\n");
phpinfo();
exit();
}

?>
</body>
</html>

A 回答 (3件)

とりあえず、


<meta http-equiv="Content-Type" content="text/html; charset=Shift-SJIS">
charsetのShift-SJISは妙です。
Shift_JISが正しいらしいです。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。残念ながらShift_JISの問題ではないようです
何が問題なのか全く検討がつきません。
引き続き皆さんからの回答を期待して待ちたいと思います。

お礼日時:2012/07/07 06:06

PHP は大昔にちょっとかじった程度なので参考程度にきいてください。



> ということはSQLServerのデータの文字コードがUTF-8ということなのでしょうか
> SJISだと思うのですが。

"◯◯なはず" とか "◯◯だと思う" とか言っても始まらないんで、実際に調べたほうがいいんじゃないかな。mb_detect_encoding($row) と mb_detect_encoding("砂糖") を比較すればなにかわかるかも。

* おまけ
* PHP のバージョンは明記した方がいい回答がつくかも。
* "charset=Shift-SJIS" は打ち間違いかなあ。"Shift-JIS" じゃなくて…。
    • good
    • 1
この回答へのお礼

ご回答ありがとうございます。
mb_detect_encoding($row) の実行結果は何も表示されませんでした
mb_detect_encoding("砂糖") の実行結果はSJISでした。
いまだに、解決方法がわかりませんので皆様のご回答をお待ちしたいと思います
PHPのバージョンはphp-5.3.13-Win32-VC9-x86.msiをインストールしたので
PHP 5.3.13のWindows版だと思います。

お礼日時:2012/07/07 11:31

#2です。

しょうこりもなくまたやってきました。おそらくこれが最後ですからもうちょっと付き合ってください。

> mb_detect_encoding($row) の実行結果は何も表示されませんでした

何も表示されない == 何も返ってこないじゃないですね。何が返ってるか確認しましょう。おそらく False なんだろうけど、その場合はエンコーディングが検出できなかったということらしい(マニュアル参照)。空文字ってあるのかな?

とここまで書いて気づいた。$row って文字列じゃないじゃん(ふつうは名前で気づく。いかに適当に読んでるかバレる)。フィールド数がいくつかわからんけど、$row[0] とかやらないと値が取れないよね?
    • good
    • 0
この回答へのお礼

ご回答ありがとうございました。
$row[0]でエンコーディングの変換処理 mb_convert_encoding($row[0], "SJIS", "UTF-8");
としたら文字化けせずに値が取得できました。
うれしさと感謝の気持ちでいっぱいです。
ありがとうございました

お礼日時:2012/07/07 14:48

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!