dポイントプレゼントキャンペーン実施中!

PHP mb_convert_encoding sjisからutf-8で一部文字の文字化けが発生します。

設定ファイル(sjisで作成)をPHP(utf-8)で読み込み、内容を更新して、再度設定ファイルとして書き出す(上書きする)スクリプトを書いています。utf-8で書き出す分には、全く問題がないのですが、書き出す前にmb_convert_encodingでutf-8からsjisに変換すると、文字化けする字が発生します。具体的には、以下の通りです。

事例1
・変換前(utf-8)
book_style="文庫,新書,雑誌,ムック,ソフトカバー,ソフトカバー大型本,ハードカバー,ハードカバー大型本,絵本"
・変換後(sjis)
book_style="文庫,新書,雑誌,ムック,ャtトカバー,ャtトカバー大型本,ハードカバー,ハードカバー大型本,絵本"

事例2
・変換前(utf-8)
;詳細侮ヲの最大表示件数
・変換後(sjis)
;詳細侮ヲの最大侮ヲ件数

該当するプログラム文は、以下の通りです。

$filepath = "setting.ini";
$string = $total_gyo;//ここで出力内容を代入します
$string = mb_convert_encoding($string, "sjis-win", "utf-8");
$string = stripslashes($string);
$fp = fopen($filepath, "w");
@fwrite( $fp, $string, strlen($string) );
fclose($fp);

各行分割して代入しても、全行一括で代入文字化けの発生状況は同じでした。

以上、どうぞよろしくお願いいたします。

A 回答 (2件)

ソは5C問題の代表的存在ですね。


すでに指摘があるとおりstripslashesの使い方を考え直す必要があるでしょう。
    • good
    • 0
この回答へのお礼

なるほど、入力する文中に””などがあり、その処理でバックスラッシュが
発生するため、入力前に削除するため、stripslashesを挿入していました。
ご指摘のように、使い方を工夫したいたいと思います。
ありがとうございます。

お礼日時:2010/05/28 15:09

>$string = stripslashes($string);


この一行は何のために入っているの?
    • good
    • 0
この回答へのお礼

#2の方へのお礼でも書きましたが、出力する文章内に""などが入る事があり、その処理でバックスラッシュが入る事があるため、その処理で入れていました。
ご返答ありがとうございます。

お礼日時:2010/05/28 15:11

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