人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

『PHP×携帯サイト デベロッパーズバイブル』を参考に;
http://www.amazon.co.jp/gp/product/4797348461/

SakuraのStandardで掲示板を制作中です

▼ソース
a.) in_enc.php:入力文字コードを内部文字コード(SJIS-win)に変換
b.) out_enc.php:内部文字コードを出力文字コード(SJIS-win)に変換
c.) bbs.php:掲示板本体
d.) bbs_d.txt:掲示板のデータ

▼解説
c から、a,b をrequire_once し、a,bに定義したfunction(input_encode, output_encode)をc のソースの上部(a)と下部(b)で実行

※各ソースは、eucで保存

※php.iniに、以下を記入
mbstring.language = Japanese
mbstring.internal_encoding = eucJP-win
mbstring.http_input = pass
mbstring.http_output = pass
mbstring.encoding_translation = Off
mbstring.detect_order = SJIS-win, eucJP-win, JIS, UTF-8, ASCII

ブラウザで見ると、euc(ソースの文字コード)のままで、
SJIS-winに変換されてません。

何卒、ご指導くださいませ!


●質問者: gets_itai
●カテゴリ:ウェブ制作
✍キーワード:ASCII BBS EUC JIS PHP
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● tezcello
●10ポイント

> SJIS-winに変換されてません。

これは

> output_encode();

が、HTMLを出力した後に実行されているからでしょう。


出力エンコードを変更するのが mbstring.http_output なら、入力も mbstring.http_input ( mbstring.encoding_translation の変更も要)にお任せしては?

◎質問者からの返答

output_encode(); を、html記述部より上にしましたが、それでもダメでした。

ちなみに;

ブラウザの文字コード設定を、SJISにするとphpに記述したHTML部分と入力した文字部分ともに文字化けします。でも、ブラウザの文字コードをeucにすると、phpに記述したHTML部分は文字化けしますが、入力した文字部分は文字化けせずに表示されます。


2 ● makeworld
●50ポイント ベストアンサー

php.iniに下記の設定を記入すればSJIS-winで表示されると思います。

output_buffering = On
output_handler = mb_output_handler
◎質問者からの返答

解決しました。

ありがとうございました。

php.iniのこと、きちんと勉強します!


3 ● ワテ
●50ポイント

以下のサイトをご確認されるとお分かりになると思いますが、

ini_set('mbstring.http_output', 'SJIS-win');

を指定しても、

コンテンツの出力時の文字コード自体が変換されるわけではありません。

http://memo.xight.org/2007-02-14-1

http://hain.jp/index.php/tech-j/2007/02/13/%EF%BC%B0%EF%BC%A8%EF...


で、

私の場合は、出力時のコンテンツの文字コードを変更する場合は、

自前で変更しています。

コメント欄のソースコード例にとれば、

以下のような感じで変換しています。

<?php

require_once 'input_encode.php';

require_once 'output_encode.php';

input_encode();

if (isset($_GET['comment'])) {

$comment = $_GET['comment'];

$comment = str_replace(array("\r", "\n"), "", $comment);

}

$filename = 'mobile_bbs_data.txt';

if (!file_exists($filename)) {

touch($filename);

}

$handle = fopen($filename, 'a+');

if (isset($comment)) {

fseek($handle, 0);

fwrite($handle, $comment . "\n");

}

$comment_list = array();

if (filesize($filename) > 0) {

fseek($handle, 0);

$data = fread($handle, filesize($filename));

$comment_list = explode("\n", $data);

$comment_list = array_reverse($comment_list);

}

fclose($handle);

//追記(ここから)--------------->

ob_start();

//追記(ここまで)<---------------

?>

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset='Shift_JIS'" />

<meta http-equiv="Pragma" content="no-cache" />

<meta http-equiv="Cache-Control" content="no-cache" />

<meta http-equiv="Expires" content="-1" />

<title>モバイル掲示板</title>

</head>

<body>

モバイル掲示板(Chap2)

<form action="" method="GET">

<input type="text" name="comment" value="">

<input type="submit" value="書き込み">

</form>


foreach ($comment_list as $comment_item) {

if (!empty($comment_item)) {

echo $comment_item . '


';

}

}

?>

</body>

</html>

<?php

//変更(ここから)--------------->

header("Content-type: text/html; charset=shift_jis");

$contents = ob_get_clean();

echo mb_convert_encoding("SJIS","EUC-JP",$contents);

//変更(ここまで)<---------------

?>

◎質問者からの返答

ありがとうございます!

PHPは、始めたばかりでまだ理解できませんが、後々非常に助けていただけるコメントだと感じます。

http://okwave.jp/qa2253365.html

なども参考になりそうですね。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ