‘PHP’ カテゴリーのアーカイブ

Firefoxで ソースコードにない・(中点)が出る

2008 年 8 月 19 日 火曜日

今この問題に悩んでいます。
1時間ほど悩んでみましたが、全然糸口が見えず、困っております。
ん~誰か教えてぇぇぇw

問題発生箇所は、とあるサイトのトップページ。
これはPHPで作成されていて、ニュースを表示する箇所だけが他のテキストファイルから
テキストを読み取って表示する仕組みにしてあります。
ま~よく <iframe>とか使ってやるよね。
今回はトップページが .html でなく .php だったので、
PHPでニュースの内容を読み込んだわけ。
該当箇所(index.php)のPHPコードはこんな感じ。

<?php
$news = file_get_contents("news.txt") ;
$news = nl2br($news) ;
echo "<p>".$news."</p>" ;
?>

見ればわかる通り、news.txt を file_get_contents() 関数を使って読み込み、
一旦 $news 変数に代入し、それを nl2br() 関数で、改行を<br />に変換し、
echoで読み出しているわけ。
ちなみにindex.php も news.txt も、文字コードはutf-8。

PHPで書き出されたHTMLコードはこんな感じ。
<p>8/17 HPをリニューアルいたしました。<br /><br />
8/18 Excel中級セミナーを開催いたします。<br />
日時:8/25 10:00~ 場所:当社3Fセミナールーム<br />
受講料:無料 参加人数:20名まで(電話でお申し込みください)<br /><br />
8/18 お友達紹介キャンペーン実施中<br />
期間中にお友達をご紹介いただくと素敵なプレゼント差し上げます。<br /><br />
</p>

なのにFirefoxで見ると、こんな感じ。

Firefox3.1.1で見ると、・(中点)はちゃんと存在しているように見える。
Firebugで見ても、・(中点)は文字としてちゃんと存在しているように見える。
「ページのソースを表示」で見ると、・(中点)は存在していないように見える。
<p>にCSS側で何らかのプロパティが引っかかっているかとも思ったけど、
何も見当たらないし、<div>などに変えても同じことが起こる。

そして、IE6、IE7、Opera、Safari(いずれもWin)では・(中点)は表示されない。
いったい何だ~~~?www

PHPでCSVファイルを読み込むと、文字化けする

2008 年 8 月 13 日 水曜日

1時間ほどのた打ち回ったネタですw
最近はHTMLもPHPも文字コードをutf-8で統一するようにしてるんだけどさ。
shift-jisだと5C問題あったりして、スマートじゃないから。
ところがutf-8でちょっと困ったことが発生。

マイクロソフトエクセルで編集したCSVファイルをPHPで読み込んで、
Webに表示しないといけなかったんだけど。
読み込むのは簡単だけどなぜーか文字化けする。アレレ・・・。
HTML文書で指定した文字コードはutf-8、
そしておそらくCSVから読み込んだテキストはshift-jis。
実際、ブラウザのエンコード設定をshift-jisにしたら、
CSVから読み込んだテキストは正しく表示された。

文字コードの変換は、mb_convert_encording() を使うんだけど。
ただなぜかこれでもうまくいかない。
ネットを調べまくった挙句に行き着いたところはこれ。

<?php
$csv = "k/data.csv" ;
$buf = mb_convert_encoding(file_get_contents($csv), "utf-8", "sjis-win") ;
$fp = tmpfile();
fwrite($fp, $buf);
rewind($fp);
while (($data = fgetcsv($fp, 1000, ",")) !== FALSE) {
echo "<p>$data[11] $data[1] $data[4]</p>" ;
}
?>

参考サイト様は、
fgetcsv() の使い方 - PHPマニュアル
PHP5 の fgetcsv() で読み込み内容が腐る現象 - blog.plastik.jp

ちなみに、今回使用するサーバーのPHPバージョンは、4.3.11。
2番目の参考サイトはPHP5の話なので、関係ないような気はするんだけどね。
わからない事だらけで調べたいところだけど、時間もないので
今回はこれで行かせていただきます!w

MySQLのDATETIME型から月日時分だけ取り出す

2008 年 7 月 28 日 月曜日

あーはまったぜぃ。(って言っても1時間くらいだけど。)
なんか毎日はまってる気がするなぁ。
でもこのモヤモヤから自力で抜け出した時の爽快感が気持ちよくて、
また泥の中に突っ込むのわかってるんだけどさw

さて今回はMySQLだぜぃ。
DATETIME型ってのは、08-07-28 20:50:15 なんて具合に、
日時を受け持つデータ型らしいんだけどさ。
時間の情報まで持ってくれてるのはいいが、いざPHPとかで取り出して、
それを表示させるときに秒までいらなかったりでウザいんだよね。
ちょうど月と日と時間と分だけが欲しくて、
うまい方法はないかなーと探したが、意外に見つからず。
(たぶん探し方が悪かったのかも・・・)

ま、とりあえず自己解決。
MySQL側で何か良い方法があるかなとも思ったけど、
関数が豊富なPHP側で探したらやっぱりあったw
こんな感じでした。

<?php
$today = "2008-07-28 21:05:11" ;
$today2 = date("m/d H:i", strtotime($today)) ;
echo $today2 ;
?>

strtotime() っていう関数があって、これを使うといけるんだね。
いや~今日もちょっとだけ進歩w