PHPで作る掲示板について
以前にも質問しましたがフォームから日本語を送信すると文字化けが発生します
info.phpでPHPのマルチバイト系の設定を確認したとこを下のようになっていました。
サーバは借りているのでphp.iniで設定変更できないため.htaccessで対処しようと
したのですがうまくいきませんでした。解決策をお願いします
環境はWin7でPHPのバージョンは 5.3.10です
mbstring.detect_order auto
mbstring.encoding_translation On
mbstring.func_overload 0
mbstring.http_input auto
mbstring.http_output UTF-8
mbstring.http_output_conv_mimetypes ^(text/|application/xhtml\+xml)
mbstring.internal_encoding UTF-8
mbstring.language Japanese Japanese
mbstring.script_encoding no value
mbstring.strict_detection Off
mbstring.substitute_character no value
//プログラム
<?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>
補足
返信ありがとうございます。 FLASHでSystem.useCodepage = true;でSIFTJISで出力しています。 PHPでは何もエンコードを変えていません。 XMLではutf-8で出力しています。 PHPでSIFTJISをutf-8に変えれれば解決でしょうか?