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

解決済みの質問

phpの日本語が□(四角)に文字化けします。

PHPでテキストファイルの検索結果をソートして出力するスクリプトで文字化けが出て困って
います。

テキストファイル------------------

20101225|第二会議室|1200|1300|就職面接
20101225|第一会議室|1300|1400|打ち合わせ
20101225|第一会議室|1500|1600|テスト
20101225|第一会議室|0900|1000|会議
20101225|第一会議室|1200|1300|休憩
20101224|第一会議室|1200|1500|クリスマス会

スクリプト(抜粋)---------------------

//$_GET["year"]) = 2010;
//$_GET["title"]) = "第一会議室";
//$_GET["month"] = 12;
//$_GET["day"] = 25;

foreach ($schedule_list as $lineno => $line) {
list($schedule_date, $title, $str_time, $end_time, $body) = explode("|", $line);
if ($schedule_date == date("Ymd", mktime(0, 0, 0, $_GET["month"],

$_GET["day"], $_GET["year"])) && $title == $_GET["title"]) {
//抽出結果を配列に格納
$data[] = array( 'sch_date'=>$schedule_date ,'title'=>"$title", 'str'=>$str_time, 'end'=>$end_time, 'body'=>"$body", 'no'=>$lineno);
}
}
//開始時間(昇順)でソート
//array_multisort($str, SORT_ASC, $end, $sch_date, $title, $body, $no, $data);

foreach ($data as $key => $row) {
$sch_date[$key] = $row['sch_date'];
$title[$key] = $row['title'];
$str[$key] = $row['str'];
$end[$key] = $row['end'];
$body[$key] = $row['body'];
$no[$key] = $row['no'];
}

表示結果(1)---------------------
 print_r($data);
 配列データの全体を表示すると、日本語も正しく表示されます。

Array ( [0] => Array ( [sch_date] => 20101225 [title] => 第一会議室 [str] => 1300
[end] => 1400 [body] => 打ち合わせ [no] => 1 )

表示結果(2)---------------------
 print_r($sch_date[0]);
print_r($title[0]);
print_r($str[0]);
print_r($end[0]);
print_r($body[0]);
print_r($no[0]);

 配列データの要素を指定して出力すると日本語が□になります。

 20101225�13001400�1

以上、どなたかご教授下さい。

日付   会議室 開始時間 終了時間 使用者
20101225 �     1300    1400   �

投稿日時 - 2010-12-24 03:53:33

QNo.6403881

困ってます

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

んー、多分。。。本当に多分程度の考えですけど、print substr($body[0] , 0 , 1); って書いても 同じように � が表示されるかもしれないんじゃないかな。。と思います。

print_r($body[0]); を print $body[0]; にしてみてください。

なんーか、たしか、文字列を配列のように表示しようとすると、こんな事が起きるんじゃなかったかな~とか、思ったり思わなかったり。

例えば、$str = "hoge"; を print $str[2]; ってやると、g が表示されたような されなかったような。

とっても、アバウトですみません。

投稿日時 - 2010-12-24 04:29:07

お礼

bm_hiroさん

早速の回答ありがとうございます。
配列にあまり詳しくないもので、参考になります。

print $body[0]; にしても□になってしまいした。
最後に全てprintで出力しているのですが、
配列の扱い方に問題があるのですかねー。

出力ソース--------------
for( $i=0 ; $i<count( $data ) ; $i++ ) {
print("<tr>\n");
print("<td>$sch_date[$i]</td>\n");
print("<td>$title[$i]</td>\n");
print("<td>$str[$i]</td>\n");
print("<td>$end[$i]</td>\n");
print("<td>$body[$i]</td>\n");
}

■こんな感じになってしまいます。TT
 20101225 � 1300 1400 �
 20101225 � 1500 1600 �
 20101225 � 0900 1000 �
 20101225 � 1200 1300 �

■ちなみに使用している文字コードはUTF-8(下記)

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

■CSSはこんな感じです。(下記)

<style type="text/css">
a:link {color: #3366FF; background-color: transparent;
text-decoration: none; font-weight: bold;}
a:visited {color: #2B318F; background-color: transparent;
text-decoration: none; font-weight: bold;}
a:hover {color: #00BFFF; background-color: transparent;
text-decoration: underline;}
body {color: #333333; background-color: #FFFFFF;}
table {border: 1px solid #CCCCCC; border-collapse: collapse;
margin-bottom: 1em;}
td {border: 1px solid #CCCCCC; height: 2.5em;
vertical-align: middle; padding-left: 1em; padding-top: 2px;
padding-right: 1em; padding-bottom: 2px;}
th {border: 1px solid #CCCCCC; color: #333333;
background-color: #F0F0F0; padding: 5px;}
</style>

投稿日時 - 2010-12-24 05:42:12

ANo.1

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

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

回答(1)

あなたにオススメの質問