単なる文字化けとも思えません。
created: 2006-05-06 00:46 | modified: 2006-05-07 10:51 | reply: 3
[3064] 単なる文字化けとも思えません。
user: Yumi | created: 2006-05-06 00:46
本当にいつも(というかトラブルたびに)お世話になっています。
下は住所検索で、mysqlでselectしたものを表示するためです。どうしても$shikuだけが文字化けしprintでは・(中点)となり、vardumpではなぜか$shikuだけ涛沢(arrayとも表示されず)になってしまいます。実際のデータは、藤沢市鵠沼松ヶ岡です。
var_dump($ken);var_dump($shiku);var_dump($addr);は以下のようになります(この例は1行分だけです)。
array(1) { [1]=> string(8) "神奈川県" } string(4) "涛沢" array(1) { [1]=> string(5) "2丁目" }
(スクリプト)
$cnt = 1;
while ($YuchiRows = mysql_fetch_array($rs)){
$ken[$cnt] = $YuchiRows[ken];
$shiku[$cnt] = $YuchiRows[shiku];
$addr[$cnt] = $YuchiRows[addr];
$cnt = $cnt + 1;
}
$cnt = 1;
while ($cnt <= $NumRows){
print("$ken[$cnt]");
print("$shiku[$cnt]");
print("$addr[$cnt]");
$cnt = $cnt + 1;
}
ちょっと長くなってしまいました。半日悩みましたが、わかりません。どなたか教えてください。
下は住所検索で、mysqlでselectしたものを表示するためです。どうしても$shikuだけが文字化けしprintでは・(中点)となり、vardumpではなぜか$shikuだけ涛沢(arrayとも表示されず)になってしまいます。実際のデータは、藤沢市鵠沼松ヶ岡です。
var_dump($ken);var_dump($shiku);var_dump($addr);は以下のようになります(この例は1行分だけです)。
array(1) { [1]=> string(8) "神奈川県" } string(4) "涛沢" array(1) { [1]=> string(5) "2丁目" }
(スクリプト)
$cnt = 1;
while ($YuchiRows = mysql_fetch_array($rs)){
$ken[$cnt] = $YuchiRows[ken];
$shiku[$cnt] = $YuchiRows[shiku];
$addr[$cnt] = $YuchiRows[addr];
$cnt = $cnt + 1;
}
$cnt = 1;
while ($cnt <= $NumRows){
print("$ken[$cnt]");
print("$shiku[$cnt]");
print("$addr[$cnt]");
$cnt = $cnt + 1;
}
ちょっと長くなってしまいました。半日悩みましたが、わかりません。どなたか教えてください。
[3067] 文字化けならば
user: ゆうじ | created: 2006-05-07 02:07
こんばんわ。
文字化けと推測されるなら、
初めに疑うべきは文字コードではないでしょうか。
1.mysql の文字コードをチェック。
2.mysql に保存する際、必要があれば、mysql の文字コードに変換。
3.mysql から取り出した後、必要があれば、表示する文字コードに変換。
このような処理はされてますか?
また、mysql の文字コードが Shift-JIS だったりすると、
アスキーコードと衝突する文字があるので、
保存の際、mysql_escape_string しておかないと正しく保存されません。
mysql_escape_string
http://jp.php.net/manual/ja/function.mysql-escape-string.php
文字化けと推測されるなら、
初めに疑うべきは文字コードではないでしょうか。
1.mysql の文字コードをチェック。
2.mysql に保存する際、必要があれば、mysql の文字コードに変換。
3.mysql から取り出した後、必要があれば、表示する文字コードに変換。
このような処理はされてますか?
また、mysql の文字コードが Shift-JIS だったりすると、
アスキーコードと衝突する文字があるので、
保存の際、mysql_escape_string しておかないと正しく保存されません。
mysql_escape_string
http://jp.php.net/manual/ja/function.mysql-escape-string.php
[3069] ご返事、ありがとうございます。
user: Yumi | created: 2006-05-07 08:51
mysqlもphpもSJISです。
保存するときも、取り出すときも、何もしていない(つもり)です。
自分の整理のつもりで状況を整理してみます。次は自己レスできるよう、がんばります。
・ken, shiku, addrに「鵠沼松が岡」と入れると、phpMyAdminでは、ちゃんと見える。
・selectで取り出し、fetch_arrayから変数→表示しようとすると、$shikuだけがちゃんと表示されない。
・前後のコラムにから取り出した同じ文字は、ちゃんと表示される。
・ためしに別名の表(全く同じ表)をつくってみましたが、状況は同じ。
保存するときも、取り出すときも、何もしていない(つもり)です。
自分の整理のつもりで状況を整理してみます。次は自己レスできるよう、がんばります。
・ken, shiku, addrに「鵠沼松が岡」と入れると、phpMyAdminでは、ちゃんと見える。
・selectで取り出し、fetch_arrayから変数→表示しようとすると、$shikuだけがちゃんと表示されない。
・前後のコラムにから取り出した同じ文字は、ちゃんと表示される。
・ためしに別名の表(全く同じ表)をつくってみましたが、状況は同じ。
[3070] 解決しました。
user: Yumi | created: 2006-05-07 10:51
文字コードの取扱い以前の、もっと低レベルでした。
以下、反省をこめて。
・検索formの県、市区をPOSTで、$ken、$shikuに受け取る。
・$sql = "select * from jusho where ken = '$ken' and shiku like '%$shiku%'";
・fetch_array→$JushoRowsに格納して
・$shiku[$cnt] = $JushoRows[shiku];
この最後の$shikuは変数名を変えなければならないようです。PHPの変数の取扱いの初心者的誤りが原因のようでした。
すいません。おさわがせしました。
以下、反省をこめて。
・検索formの県、市区をPOSTで、$ken、$shikuに受け取る。
・$sql = "select * from jusho where ken = '$ken' and shiku like '%$shiku%'";
・fetch_array→$JushoRowsに格納して
・$shiku[$cnt] = $JushoRows[shiku];
この最後の$shikuは変数名を変えなければならないようです。PHPの変数の取扱いの初心者的誤りが原因のようでした。
すいません。おさわがせしました。