http://oshiete1.goo.ne.jp/qa5426504.html
大嫌い。発想が"サニタイズ"と一緒なのだ。>br要素
https://developer.mozilla.org/en/CSS/white-space
#もともと嫌いだけどやるにしても方法が違う。>n2br
$doc = new DOMDocument();
/* 面倒なので、HTMLではなくXMLです。*/
$p = $doc->createElementNS("http://www.w3.org/1999/xhtml","p");
$x = "abc" . chr(10) . def";
$y = explode($x,chr(10));
$p->appendChild($doc->createTextNode($y[0]));
array_splice($y,0,1);
while(count($y) > 0){
$p->appendChild($doc->createElementNS("http://www.w3.org/1999/xhtml","br"));
$p->appendChild($doc->createTextNode($y[0]));
array_splice($y,0,1);
}
$doc->appendChild($p);
…という感じで書くべきだよね?
Q1.ところで、どうして、for(;;){}とか使わなかったの?
A1.いろんなところでよくループ変数が使われるけれど、本来あるべきなのか疑問であり、使わないように努めた。
Q2. どうしてforeachを使わなかったの?
A2.添字が取得できない以上、より広いスコープに別な変数をわざわざ用意しなければならないから。
また、ループ変数を使わないとなると、上記コードのようにarray_spliceを使って最初の要素だけ削り取る形になるけれど、
「最初だけがない」という状況にしておくのは一貫性的にあまり納得がいかなかったため、全て内容を削除する方針とした。また、今回書くのは自分しかいないけれど、他の人がこの後にコードを書き続けるときに、「あ、なんだ、$yに全て入っているのね、再利用しよう」などと言われるような状況をイメージしてしまったため。
Q3. chr関数を使ったのは?
A3. gooの仕様で変な挙動するエスケープシーケンスを使う気にならないから。
読まない人にコピペで持っていかれるのは気に食わないが、読む人には、変な細工するよりも、コピペで動作を確認でき、自分で調べられる状態の方が望ましいと思うから。…とは言うものの、この程度をどうこうしようとする人はいないと思う。