PHP初心者です。
レンタルサーバでdatファイルに書き込んでる情報をPHPファイルで出力すると、日本語の部分が文字化けしてしまいます。
datファイルから読み込んでいない日本語の部分はちゃんと表示されています。
また、datファイルにはちゃんと日本語のデータになっています。
文字コードはEUC、
PHPの出力はSJIS。
これはどういうことでしょうか?
どなたか教えて下さい。
ソースは以下3ファイル構成↓
<入力するデータを集めるファイル>
<html>
<body>
<h1 style="background:#cccccc">ゲストブック(書き込み)</h1>
<form method="POST" action="guest_write.php">
お名前:
<input type="text" name="name" size="20" maxlength="30" /><br />
メッセージ:
<input type="text" name="message" size="70" maxlength="255" /><br />
<input type="submit" value="送信" />
</form>
</body>
</html>
<入力したデータをdatに書き込むファイル>
<?php
$file=fopen("guest.dat","a");
flock($file,LOCK_EX);
$line =date("Y年 m月d日 H:i:s")."\t";
$line.=$_POST['name']."\t";
$line.=$_POST['message']."\t";
fputs($file,$line."\n");
flock($file,LOCK_UN);
fclose($file);
header("Location: guest_input.php");
?>
<datファイルから読み込んで出力するファイル>
<html>
<body>
<h1 style="background:#cccccc">ゲストブック(閲覧)</h1>
<?php
$file=fopen("guest.dat","r");
while($row=fgetcsv($file,1024,"\t")){
?>
<ol>
<li>お名前:<?php print($row[1]); ?></li>
<li>メッセージ:<?php print($row[2]); ?></li>
<li>書き込み日時:<?php print($row[0]); ?></li>
</ol>
<hr />
<?php
}
fclose($file);
?>
</body>
</html>
以上ですが、宜しくお願い致します。
No.3
- 回答日時:
どのように出力されるはずが、どのように出力されているんでしょう?
文字コードによる文字化けなら何がどのように化けているのか、その文字をみれば大体分かると思います。
勘ですと
fgets($file,1024))
ここを
fgets($file,4096))
にすると直ったり。
この回答への補足
DATファイルの中身は
『2005ヌッ 12キ・4ニ・ 13:04:40****宜しくね』
になっています。
datファイルをsjisで保存すると、
『**** 宜しくね』がちゃんと表示され、
2005年 12月 4日がちゃんと表示出来なくなりました。
お名前:****
メッセージ:宜しくね
書き込み日時:2005年 12月04日 13:04:40
と表示されるところが、
お名前:?g????/li>
メッセージ:?X????/li>
書き込み日時:2005年 12月04日 13:04:40
と表示されてしまいます。
fgets($file,4096))にしたけど、ダメでした。
どうすれば良いでしょうか?
No.1
- 回答日時:
そういう処理をする場合は EUCかSJISか、文字コードを統一させる事が大前提ですよ
もしくは、どうしてもDATファイルをEUC、ソースをSJISと使い分けたいのであれば、文字コードを変換して読み書きしなければなりません
この回答への補足
すみません。一部説明不足でした。
『文字コードはEUC、PHPの出力はSJIS。』
とは、PHPファイルをEUCで保存し、出力をphp_value mbstring.http_output SJISで設定しているという意味です。
fgetcsv関数はLINUX環境だと文字化けを起こすと調べた上分かりましたので、fgets関数を使い、以下のように修正しましたが、まだ文字化けを起こしています。
<html>
<body>
<?php
$file=fopen("guest.dat","r");
while($row=fgets($file,1024)){
$datum=explode("\t",$row);
?>
<ol>
<li>お名前:<?php print($datum[1]); ?></li>
<li>メッセージ:<?php print($datum[2]); ?></li>
<li>書き込み日時:<?php print($datum[0]); ?></li>
</ol>
<hr />
<?php
}
fclose($file);
?>
</body>
</html>
レンタルサーバのバージョンはPHP4.3.10です。
どうすれば直りますでしょうか?
本当に困ってます。
どうか宜しくお願い致します。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PHP PHP MySql 画像を取得 1 2022/06/04 14:05
- CGI htmlからパラメータで、cgiに渡したい。 1 2023/02/06 16:15
- PHP PHPで画像の渡しが上手く行きません。 1 2023/02/02 09:39
- CGI perlで書いたcgiでsqliteの使い方を教えてください 2 2023/05/08 21:29
- PHP PHPでCookieを使った訪問回数について 1 2023/05/28 14:10
- PHP htmlspecialcharsが機能していないです。 バグですか? 1 2022/04/05 01:22
- PHP if(preg_match("/[^0-9]/",$gu_d)){意味を教えてください。 1 2022/05/06 05:37
- HTML・CSS CSSが効かずどのように指定すれば良いか分からないのでアドバイスお願い致します 2 2023/06/07 12:25
- PHP 入力した部分を表示させたまま(保持)するにはどうすれば良いでしょうか? 1 2023/01/25 11:14
- Excel(エクセル) PHPプログラムをエクセルに張り付けると検索ボックスがでてくる! 3 2022/05/08 07:10
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
stdinからの処理でメール情報を...
-
値の取り出し方について教えて...
-
PHPで特定の文字列のみ抽出し、...
-
PHPでFilename cannot be empty...
-
stat failed
-
PHP+MySQL でのcsvファイルイン...
-
ファイルの行数取得
-
phpでPEAR::DBを使っているので...
-
onedrive にexcelファイルをア...
-
index.phpって何ですか? 具体...
-
index.phpに入るには、どうすれ...
-
PHP8を使うと、大量のWarningが...
-
トランザクションが原因?DBに...
-
エックスサーバーでのmysql設定...
-
パースエラーとは?
-
フォントの色を変えるには?
-
ImageCreate関数が undefined f...
-
入力フォームの空白や改行を制...
-
別ファイルの変数を呼び出した...
-
php5-extensions を make でき...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
PHPでFilename cannot be empty...
-
値の取り出し方について教えて...
-
stat failed
-
2つの画像ファイルが異なるファ...
-
独自INIファイルの操作をしたい...
-
Smartyで吐き出されたhtmlソー...
-
日本語のファイルが開けない
-
PHPで特定の文字列のみ抽出し、...
-
別のサーバにあるファイルの存...
-
shift-jisでfgetcsv
-
PHPでの別のサーバーのテキスト...
-
ファイル名は、数字の「0」(...
-
PHPでテキストファイルかどうか...
-
CSVファイルの文字コード変換に...
-
PHPのファイル操作
-
日本語が文字化けしないよう読...
-
PHPでAPI 出力はCSVを取得する...
-
phpのftp_get()でエラーが出ます。
-
PHPで外部ファイルから取り込ん...
-
php4、php5によるimplode()、fi...
おすすめ情報