こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

PHPで作る掲示板のプログラムについて

これを実行するとページは表示されるのですが、名前や題名、本文に日本語を入力すると
例えば名前に「山田」と入れ送信すると投稿者のところに何も出ません
どうすれば解決できますか?


<?php
$lines = file('bbs2.txt');
if ($_POST['write']) {
$items = explode("\t", $lines[0]);
$no = $items[0] + 1;
$name = htmlspecialchars($_POST['name']);
if (!$name) $name = "名無しさん";
$mail = htmlspecialchars($_POST['mail']);
$title = htmlspecialchars($_POST['title']);
if (!$title) $title = "無題";
$contents = htmlspecialchars($_POST['contents']);
$contents = str_replace("\r\n", "<br>", $contents);
$contents = str_replace("\r", "<br>", $contents);
$contents = str_replace("\n", "<br>", $contents);
$delkey = htmlspecialchars($_POST['delkey']);
$time = date("Y/m/d H:i:s");
$expire = time() + 3600 * 24 * 30;
setcookie("name", $name, $expire);
setcookie("mail", $mail, $expire);
setcookie("delkey", $delkey, $expire);
$data = "$no\t$name\t$mail\t$title\t$contents\t$delkey\t$time\n";
array_unshift($lines, $data);
} else {
$name = $_COOKIE['name'];
$mail = $_COOKIE['mail'];
$delkey = $_COOKIE['delkey'];
}
if ($_POST['delete']) {
for ($i = 0; $i < count($lines); $i++) {
$items = explode("\t", $lines[$i]);
if ($items[0] == $_POST['delno'] && $items[5] == $_POST['delkey2']) {
array_splice($lines, $i, 1);
}
}
}
if ($_POST['write'] || $_POST['delete']) {
$fp = fopen('bbs2.txt', 'w');
foreach($lines as $line) fputs($fp, $line);
fclose($fp);
}
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html lang="ja">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
<title>掲示板2</title>
</head>
<body>
<form method="post" action="bbs2.php">
お名前:<input type="text" name="name" value="<?php print $name ?>"><br>
メール:<input type="text" name="mail" value="<?php print $mail ?>"><br>
題 名:<input type="text" name="title"><br>
削除キー:<input type="password" name="delkey" value="<?php print $delkey ?>"><br>
<textarea name="contents" cols="60" rows="5"></textarea><br>
<input type="submit" name="write" value="送信">
<hr>
記事番号:<input type="text" name="delno">
 削除キー: <input type="password" name="delkey2">
 <input type="submit" name="delete" value="記事削除">
</form>
<hr>
<?php
foreach($lines as $line) {
$line = rtrim($line);
$items = explode("\t", $line);
print "No.{$items[0]} ";
print "<b>{$items[3]}</b> 投稿者:";
if ($items[2]) print "<a href='mailto:{$items[2]}'>";
print $items[1];
if ($items[2]) print "</a>";
print " 投稿時間:{$items[6]}";
print "<p>{$items[4]}</p><hr>\n";
}
?>
</body>
</html>

投稿日時 - 2012-06-27 19:05:16

QNo.7558452

すぐに回答ほしいです

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.3

どっちで回答していいかわからなくなってるんですが・・・

http://okwave.jp/qa/q7560263.html

文字化けしているなら、ブラウザのエンコードを変更して「どの文字セットなら化けないか」を確認してください。

もうひとつの質問への回答でも書きましたが、マルチバイト系の設定が疑わしいです。mbstring.encoding_translationとかが効いてませんか?サーバを設定した人間は内部ではutf-8しか使わないだろうと思って設定したとか(汗

http://www.php.net/manual/ja/mbstring.configuration.php#ini.mbstring.encoding-translation

投稿日時 - 2012-06-28 19:25:39

補足

回答はこちらでお願いします

ブラウザのエンコードを変更したところutf-8だと山田と言う部分は正常だったのですが他の部分がおかしくなってしまいます

投稿日時 - 2012-06-28 19:39:15

ANo.2

ANo.1です

>どのブラウザを使用したか教えてもらえると助かります

IE8とFirefoxで確認しています。

bbs2.txtに直接アクセスして内容を確認したら、どうなっていますか?

投稿日時 - 2012-06-28 18:09:40

補足

先ほど改めて書き込みを行ってみたところ、投稿者に「山田」と打ち込み送信すると投稿者:絮援”亜‥蟾道�屐のようになっており、bbs2.txtにアクセスして内容を確認しても山田ではなく文字化けした絮援”亜‥蟾道�屐が入っていました。
何がいけないんでしょうね

投稿日時 - 2012-06-28 18:20:30

ANo.1

提示されたソースを手元の環境(WinXP+xampp)で試しましたが、動作します。Undefined IndexのWarningが大量に出るので問題ないとは言えませんが、少なくとも

>投稿者のところに何も出ません

という現象は確認できませんでした。どういう環境で試されているかを提示してください。またテキストファイル(bbs2.txt)の内容は確認されていますよね。

投稿日時 - 2012-06-28 10:59:42

補足

Win7でサーバは用意されたものを使っています、もしかしたらブラウザの問題かもしれませんね、どのブラウザを使用したか教えてもらえると助かります

投稿日時 - 2012-06-28 17:19:49

あなたにオススメの質問