電子書籍の厳選無料作品が豊富!

かなり初歩的質問かも知れませんが、ご回答頂けれ助かります。m(__)m

現在MYSQLを使用しPHPの現在のデータを格納しようと思いました。
そこで、全角文字の中に'等が入っており、これを
mysql_escape_string(
または
mysql_real_escape_string(
を使用し格納しようとしたのですが、全角文字が文字化けしてしまい、
'全角'文字'の様に真ん中の'は文字列として残したいと思ったのですが、
'全角文字の様な形式になってしまい後ろの'がなくなってしまいました。
全角文字の部分は文字化けしていて暴゜・こんな風になってしまいます。

何か解決方法はありませんでしょうか?
まだまだ初心者の為、かなり初歩的質問かも知れませんがご回答頂けたら助かります。

よろしくお願い致します。

A 回答 (2件)

>その中のデータは色々な文字列が含まれるせいかうまく下記に記したソースではエラーがあちこちで出てしまいます


ソースがShift_JISなら、プログラムコードとして読み込む時点で、エラーになるし文字化けになるしで対策が大変です。
ま、それぞれ問題となる文字にせっせとバックスラッシュ\を付けて回るか、
データは、csvファイルにでも書き換えて、プログラムとしてではなく、ファイルから文字列変数に直接読み込めば、プログラム解釈における上記問題は、なんとか解決できるでしょう。
phpやmysqlの文字コード設定が変更可能なら、なるたけShift_JISは使わず、eucかutf8にすべきでしょう。

また、文字列に'を含みたいのに、\でエスケープもせずに''で括ってたりしませんよね?
$DATA[name] = '名前'ccc'さん';// これはどの文字コードでも、プログラムとしてエラー
$DATA[name] = '名前\'ccc\'さん';//ok
$DATA[name] = "名前'ccc'さん";//ok

あと、記載されたコードで気になるのは、この行 $tmp2 ってどこから出てきたのかな? $tmp[$i]の間違い?
list($bbsid,$userid) = split("\t",$tmp2);

この回答への補足

ご解答頂きありがとう御座います。
$tmp2はこちらで不要コード消したらそうなってしまいました。
tmp[$i]で正解です。

EUCも考えたのですが、最初PHP自体も全く素人でして、最初の作りがシフトJiSだった為
全ソースを書換となるとそれこそ・・みたいな状況でしてそのまま運用する事にしたのです。
また$DATA[name]部分なのですが、データ内は\はつけておりません。
これはやはり書きこみ等があった時には強制的につけた方がいいのでしょうか?

補足日時:2007/06/23 22:25
    • good
    • 0

文字化けするのは、格納したときの文字コードと、取り出して表示するときの文字コードが異なるからじゃないのかな。


「'全角'文字'の様に真ん中の'」これはphpのコード内に記述している文字列でしょうか?
それとも、$_POSTなどから得たものでしょうか?
phpの書き方の方に問題がありそうです。ソースを提示してみて下さい。

参考URL:http://php.s3.to/man/function.mysql-real-escape- …

この回答への補足

ご解答頂きありがとう御座いました。
データは元あったデータがphpファイルにて保存されており、それをincludeした物です。
元あったデータは
$DATA[name] = '名前';
の様に保存してあります。

その中のデータは色々な文字列が含まれるせいかうまく下記に記したソースではエラーがあちこちで出てしまいます。
問題ない文字列であれば普通に動く様ですが・・
コードは現在シフトJISになっております。

お忙しい中ご解答ありがとう御座います。
お暇な時でいいので解決策がありましたら教えて下さい。m(__)m
ソースは不要そうな部分は省いておりますが、下記になります。
$CONF_dbType = "mysql";
$CONF_dbUser = "user";
$CONF_dbPass = "pass";
$CONF_dbName = "name";
$CONF_dbHost = "localhost";
$db = mysql_connect($CONF_dbHost, $CONF_dbUser, $CONF_dbPass);//データベースに接続userネーム
mysql_select_db($CONF_dbName,$db);//実行するデータベース名の選択 DBネーム
include("../config.php");
$tmp = file("../list.cgi");// $tmpに全改行コード等を含めたデータが入る
$end = count($tmp);
for ( $i = 0 ; $i <= $end ; $i++)
{
list($bbsid,$userid) = split("\t",$tmp2);
$userid = trim( $userid, '\n' );
$data_php = "$data_dir/data.php";
if(!is_readable($data_php)){
continue;
}
include($bbs_php);
$DATA[name]= mysql_real_escape_string($DATA[name]);

$adddata = "INSERT INTO bbs_set_data( userid ,id, genre, type, name) VALUES('" .
$userid . "','" . $DATA[id] . "'," . $DATA[genre] . "," . $DATA[type] . ",'" . $DATA[name] . "')";
//データベース実行命令 ↑
mysql_query("LOCK TABLES $CONF_dbName WRITE");
$query = mysql_query($adddata , $db );// 実行命令を実行する。
mysql_query("UNLOCK TABLES");
}

補足日時:2007/06/22 21:21
    • good
    • 0

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