2009年4月12日日曜日

IE8で特定の条件で white-space: nowrapが暴走するバグ

レアなケースだが、下記の条件を満たすと、white-space:nowrapが指定した要素の外にも効力を発揮してしまうようだ。

条件

  • nowrapにする要素は、table要素の中にある
  • table要素の親要素がfloatになっている
  • nowrapにする要素が複数並んでいる
  • nowrapにする要素内の先頭には、inputやimg等の要素がある(a要素の場合は問題なかった)


上記の条件を満たすと、nowrapにする要素と次のnowrapにする要素の間も改行されなくなる。


バグが発生するHTMLの例
<style type="text/css">
span{
white-space: nowrap;
}
</style>

<div style="float:left; width:12em; background-color:#fff">
<table>
<tr>
<td>
<span>IE8改行バグの例</span>
<span><input type="text" /></span>
<span><img src="sample.gif" /></span>
</td>
</tr>
</table>
</div>

IE8で表示すると↓spanと次のspanの間のところで改行されず、横にはみ出してしまう。



IE7では正常↓



Firefoxでも正常↓

Are you ready for PHP 5.3 ?

PHP5.3についてのIBMによる解説記事シリーズ。
冒頭の一文を並べると面白い。


最初の頃は、

第 1 回 2008年 11月 11日
PHP V5.3 は 2008年の終わりまでにリリースされる予定であり、...
第 2 回 2008年 12月 09日
この「PHP V5.3 では何が新しいのか」シリーズの記事では、2008年の末までにリリースされる予定の PHP V5.3 の、...

それが2008年末を過ぎると、
第 3 回 2009年 01月 20日
PHP V5.3 がまもなくリリースされようとしています。...
第 4 回 2009年 01月 27日
PHP V5.3 がまもなくリリースされようとしています。...
第 5 回 2009年 02月 24日
この「PHP V5.3 では何が新しいのか」シリーズでは、まもなくリリースされようとしている PHP V5.3 の、

順調に遅れたという感じか。


ここから本題。

PHP 5.3の注目機能はやはり名前空間とクロージャ。
クロージャは最低限の使用にしないとチームでの開発には支障が出そうだけど。

そして、
非推奨となった項目
PHP V5.3 から、古い関数が正式に非推奨となり、今後の PHP のバージョンでは使用できなくなります。これらの関数を使用すると E_DEPRECATED エラーが出力されます。PHP V5.3 では以下の関数が非推奨となっています。
(中略)
ereg 正規表現関数: この関数の代わりに PCRE 正規表現関数を使うことが推奨されています。PCRE 正規表現関数の方がはるかに高速であり、しかも他の言語やアプリケーションで使われている正規表現と一貫性があるからです。ereg 関数はサポートされなくなるため、PHP を 1 つの正規表現エンジンで標準化することができます。
えええ!!!これは影響がある。
preg系ってUTF-8以外のマルチバイトを完全に扱えるようになったのかな???

2009年3月27日金曜日

PHPの fputcsv()で CSVを出力する

(2011/1/17 追記:まとめ的なものも書いた → floatingdays: PHPで CSVをダウンロードするための参考サイトとサンプルコード)


PHPでCSVを出力するなら、fputcsv()が便利。

$fp = fopen('test.csv', 'w');
fputcsv($fp, array(123, 'abc', '"quoted"', ',,,', 'あああ'));
fclose($fp);

↓

123,abc,"""quoted""",",,,",あああ

ポイント
  • 必要に応じてダブルクォートで囲ってくれる
  • データにダブルクォートを含む場合、ダブルクォートを2重にしてエスケープしてくれる


デフォルトではカンマ区切りになるが、第3引数で区切り文字を指定できる。

タブ区切り(TSV)にする場合の例
$fp = fopen('test.csv', 'w');
fputcsv($fp, array(123, 'abc', '"quoted"', ',,,', 'あああ'), "\t");
fclose($fp);


難点は文字コードの指定ができないこと。
CSVをExcelで普通に開く場合、マルチバイト文字がShift_JISでないと文字化けしてしまう。
事前にSJISに変換しておくしかないのか。



Google Codeの JavaScriptファイルを外部サイトから読み込んでも良い?

Google CodeでホスティングしているJavaScriptファイルやCSSファイルを、自分のサイトで読み込んでよいか?について調査。

Google自身によるIE7.jsやgmaps utility libraryなどのプロジェクトを見ると、Google CodeからJavaScriptを読み込んでも良いように書いてある。

Upgrade MSIE5-6 to be compatible with MSIE7.
<!--[if lt IE 7]>
<script src="http://ie7-js.googlecode.com/svn/version/2.0(beta3)/IE7.js" type="text/javascript"></script>
<![endif]-->
What's the purpose of this project?
We've realized that there are many possibly useful extensions of the Google Maps API for adventurous developers, but that the common user needs a reliable and quick-loading API.
(中略)
I want to use a library here in my maps mashup. What do I link to in my script include?
If you want to use a stable release, you should link to the code in the release project here: http://gmaps-utility-library.googlecode.com/svn/trunk/
Links to the release versions of each library are listed on the Libraries page.


また、(たぶん)Googleに在籍しているDaniel O'Brienさんは
Is it ok to host javascript directly from Google Code?
↓
Yes, so long as it doesn't send an extreme amount of traffic our way,

at which point requests might start being throttled.

と回答している。

なので、ある程度大量のトラフィックじゃなければOKみたい。


でも、Google Code Prettifyのところを見ると、自分のサーバに置いて使わないといけないと書いてある。
Include the script and stylesheets in your document (you will need to make sure the css and js file are on your server, and adjust the paths in the script and link tag)
from Javascript code prettifier

うーん?

JavaScript Hostを使ったほうがいいのかなあ?

PHPの ZipArchiveのエラーコード

ZipArchiveをopen()した時のエラーコードの定数と、実際の値を調べたのでメモ。

ZIPARCHIVE::ER_EXISTS = 10
ZIPARCHIVE::ER_INCONS = 21
ZIPARCHIVE::ER_INVAL = 18
ZIPARCHIVE::ER_MEMORY = 14
ZIPARCHIVE::ER_NOENT = 9
ZIPARCHIVE::ER_NOZIP = 19
ZIPARCHIVE::ER_OPEN = 11
ZIPARCHIVE::ER_READ = 5
ZIPARCHIVE::ER_SEEK = 4

でも、PHP: 定義済み定数 - Manual(コメント欄)にはもっと詳しく書いてあった。


参考:PHP: ZipArchive::open - Manual

ブログ アーカイブ

tags