mb_convert_encodingとUTF-8>JIS変換の問題

このQ&Aのポイント
  • mb_convert_encodingを使用してUTF-8からJISに変換する際、ファイルの冒頭に文字化けが残る問題が発生します。
  • この問題を解決するためには、mb_convert_encodingの代わりに別の関数を使用する方法があります。
  • または、変換後に文字化けを削除する方法もあります。
回答を見る
  • ベストアンサー

mb_convert_encodingとUTF

mb_convert_encodingでUTF-8>JIS変換行う場合 $fileにファイル内容全部が読み込まれた状態で、mb_convert_encoding($file, "JIS", "UTF-8")とした場合、$fileの冒頭に?という文字化けが残ります。 これを削除もしくは表示させないようにするにはどうしたらよいのでしょうか? if(($buf = mb_convert_encoding(file_get_contents("$file"), "jis","utf-8"))<>""){ $file = tmpfile(); fwrite($file, $buf); rewind($file); if((flock($file,LOCK_EX))!==false){ while(!feof($file)){ $str = fgetcsv($file,1000,","); <処理~~~~> } } fclose($file); }

  • PHP
  • 回答数1
  • ありがとう数2

質問者が選んだベストアンサー

  • ベストアンサー
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

>$fileの冒頭に?という文字化けが残ります。 状況がわかりませんが、単純にBOMじゃないですか?

参考URL:
http://ja.wikipedia.org/wiki/%E3%83%90%E3%82%A4%E3%83%88%E3%82%AA%E3%83%BC%E3%83%80%E3%83%BC%E3%83%9E%E3%83%BC%E3%82%AF
picicate
質問者

お礼

すいません解決しました。 BOMではなかったです。

関連するQ&A

  • PHP mb_convert_encoding sjisからutf-8

    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); 各行分割して代入しても、全行一括で代入文字化けの発生状況は同じでした。 以上、どうぞよろしくお願いいたします。

    • ベストアンサー
    • PHP
  • phpのmb_convert_encodingで文字化け

    phpのmb_convert_encodingで文字化け phpでmb_convert_encodingを使用してSJISよりUTF-8にエンコーディングしています。 ところが、“(”や“?”などが1文字目に存在すると文字化けしてしまいます。 どのような原因が考えられますでしょうか? お願いいたします。

    • ベストアンサー
    • PHP
  • php初心者の質問fgetcsv

    いつもお世話になっております。 下記のプログラムを実行しますと、 999,test,90, 999,test,90, 999,test,90, のようになりますが、 行末の最後のカンマを取り除きたいです。 すみません。どの部分修正すればよいか、ご教授いただきたくどうぞよろしくお願い致します。 <?php $file_name="test.csv"; $id=999; $name="test"; $point=90; $array = compact("id","name","point"); $string = implode(",",$array); $file = fopen($file_name,"a+") or die("OPENエラー{$file_name}"); flock($file,LOCK_EX); fputs($file,mb_convert_encoding($string."\n",'Shift-JIS','UTF-8')); flock($file,LOCK_UN); fclose($file); $file = fopen($file_name,"r"); while ($row = fgetcsv($file,1000,",")){ echo "<hr>"; for ($i = 0 ; $i<count($row); $i++){ echo mb_convert_encoding($row[$i].",",'UTF-8','Shift-JIS'); } } fclose($file); ?>

    • ベストアンサー
    • PHP
  • mb_convert_encodingのタイミング

    検索フォームがあるphpファイルはShift_JISですが、検索を問い合わせるデータベースがEUC-JPになっています。 <form action="search.php" method="post"> <input type="text" name="keyword" size=30> <input type="submit" value="検索"> </form> 検索フォームで入力されたキーワードをmb_convert_encodingでShift_JISに変換してからpostしたいのですが、search.phpで検索キーワードを受け取る前にエンコード変換することは無理なのでしょうか?

    • ベストアンサー
    • PHP
  • i18n_convert と mb_convert_encoding の違い

    メールの文字化け問題で色々ここも見たのですが ズバリ $enc = mb_detect_encoding($body); $body = mb_convert_encoding($body,"AUTO",$enc); と $enc = mb_detect_encoding($body); $body = i18n_convert($body,"AUTO",$enc); の違いが分かりません。 同じ事をしていると思うのですが・・・。 あと、受信するメーラーや PCが変わると 本文が文字化けしたりしなかったりで "AUTO"の部分をJISにしたらまず文字化けします AUTOなら良かったり良くなかったりです php.iniのこともよく出ていましたが 今レンタルサーバー使っています PHP 4.3.2 を入れているようです 文字コードについてはサーバー管理者に聞かないといけないのでしょうか パリッと文字化けしないようにしたいのですが 何かいい方法はないでしょうか?

    • ベストアンサー
    • PHP
  • 【PHP】mb_convert_encoding()で "~" 等が化ける

    PHP5.2.4 使用者です。(レンタルサーバー) 例えば、サーバー及び記述の文字コードがEUC-JPだとして、 $str = "~"; $str = mb_convert_encoding($str , 'UTF-8', 'EUC-JP'); とすると "?" に化けてしまいます。 調べたところ、マルチバイト文字の ~ ¬ ∥ - ¢ £ \ は対応するコードがないから化けるとか… "~" はよく使う文字ですし、そんな簡単に化けられては困るんですが… プロの方はこういうのどう処理してるのでしょう。 お詳しい方、よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • mb_convert_encoding() エラー

    http://www18.tok2.com/home/koumori27/xml/pxml/pxml2.htmlのxmlpaser_sample1.php3を自分のパソコンで試したら、Fatal error: Call to undefined function: mb_convert_encoding() in c:\php\xmlpaser_sample1.php on line 99と出ました。 http://www.php.net/manual/ja/ref.mbstring.php#ini.mbstring.languageに書いてある 例 1. php.ini 設定の例 mbstring.language = Japanese; mbstring.internal_encoding = UTF-8 ; mbstring.encoding_translation = On mbstring.http_input = auto ; mbstring.http_output = UTF-8 ; mbstring.detect_order = auto ; mbstring.substitute_character = none ; と http://oshiete1.goo.ne.jp/kotaeru.php3?q=293266 に書いてある方法を試しましたが Fatal error: Call to undefined function: mb_convert_encoding() in c:\php\xmlpaser_sample1.php on line 99 が直りません。 どうすれば直るのでしょうか?

    • ベストアンサー
    • PHP
  • 空メールサービスの自動返信機能プログラム内でmb_convert_encodingが動作しない

    はじめまして。SOGURINと申します。 こちらでの質問は初めてですので何卒宜しくお願いします。 いろいろ調べましたが、解決策が見つからなかったので、ご質問させてください。 【現象】 空メール受信でPHP起動し、送信者に対して自動返信メールを送るプログラムを組んでいます。 /etc/aliasesに起動するphpのファイル名を設定してプログラムを起動する所までは順調です。 返信内容の別ファイル(SJISで保存)からタイトルと本文を読み込んで、 送信前にタイトルをJIS変換させる記述を入れると、プログラムがこの記述で止まってしまいます(おそらく)。 $title = mb_convert_encoding($title,"JIS","SJIS"); ※(おそらく)と言うのは。。 エラーログを出そうとしてもエラーログ出力されないので、多分そうだろうと言う事です。 if(!$title = mb_convert_encoding($title,"JIS","SJIS")){ $output = "関数エラー"; log_up($output,$LOGFILE); exit; } 確実に言えるのは、上記で、 $titleのmb_convert_encodingの記述を外してそのまま送ると、文字化けしたメールが届く。 mb_convert_encodingの記述を入れると、メールは届かない と言う事です。 これまでに似たような話題はありましたが、 ・mb_stringを入れてコンパイルしないといけない点に関しては、phpinfo()で、 「'--enable-mbstring'」とありましたのでインストールされているのか。と。。 ・他のプログラムで画面上で操作して、mb_convert_encodingでJIS変換⇒メール送信 という機能は使ってますが普通に動いてます。 ということで、サーバーとしてmb_convert_encodingが動かない環境と言うわけでは無いと思うのですが、通常起動の時はmb_convert_encodingが正常に動作して、 自動起動の時だけmb_convert_encodingでプログラムが止まってしまう事に関して、他に原因として考えられることがありますでしょうか?

    • 締切済み
    • PHP
  • mb_convert_encodingの文字数

    質問させていただきます。 半角256文字以上の文章を以下のように表示させようとしています。 mb_convert_encoding($str,"UTF-8","SJIS") これで文字列を表示させようとすると文字が256文字で途切れてしまいます。 文字列を256文字以上で、文字数制限なく、表示させる方法を 探しています。どなたかわかる方いたら教えてください。

    • ベストアンサー
    • PHP
  • 日本語が文字化けしないよう読み込み

    特定ファイルにある複数行の日本語文章を 「fgets」や「file_get_contents」などで画面に読み込む時は、 単純に「mb_convert_encoding」を使えば 良いと思ったのですが 下記のようには文法的にも使えませんでした。 -------------------------------------- <?php $fp = fopen("sample.txt", "r"); $fp = mb_convert_encoding($fp, "UTF-8"); ←※間違い if($fp){ flock($fp, LOCK_SH); while(!feof($fp)){ $data = fgets($fp); echo "$data<br>"; } flock($fp, LOCK_UN); } fclose($fp); ?> -------------------------------------- すでに書き込んである 日本語が複数行書かれたファイルから 文字化けしないようにデータを読み込んで表示するには どのような処理をしたら良いのでしょうか? 複雑な処理はまだ理解できないので 簡単な処理方法があれば お教えください。 よろしくお願いいたいます。

    • ベストアンサー
    • PHP

専門家に質問してみよう