[PHP-users 8888] Re: パースの際の改行の扱い

Yasuo Ohgaki php-users@php.gr.jp
Wed, 24 Jul 2002 11:58:49 +0900


HAYAKAWA Hiroshi wrote:
> なるほど。最初ピンと来ませんでしたが、
> HTTPヘッダの前に他のデータを出力してはいけないというあれですね。
> 
> とすれば、すでにHTMLタグが出力されたかどうかを
> 判定すればいいような気もするのですが、

実装する事もできますが、これもいろいろ問題があります、、、

> <?php ... ?>が1行におさまっている場合と複数行にわたる場合とでは、
> 「こうなってほしい」という直観的なイメージも異なりますね。

<?php echo "something";?>[ここにスペースを入れる]

と回避できると思います。

<?php header('something');?>
<?php header('another');?>
<html>
 ......

は正しい文法なので正しく動作させる必要があります。

HTTPではCRLFを行の最後に入れる事になっているので
LFとかCRが入ると困るという別の問題もあります。

> なんかうまい具合になって欲しいなとは思いますが、
> そのようにしてあるということがわかりましたのですっきりしました。
> ありがとうございました。

内部的には

<html>
<head>test</head>
<body>
<?php echo 'somthing';?>


と書くのは

echo '<html>[LINEFEED CHAR]';
echo '<head>test</head>[LINEFEED CHAR]';
echo '<body>[LINEFEED CHAR]';
echo 'somthing';

と同じです。
# [LINEFEED CHAR]はファイルに書かれている改行文字です
# UNIXではLF、MACではCR、WinではCRLF

ですから、<?php echo 'somthing';?>の後に
改行がほしい場合は改行文字もecho/printで出力する方法が
正しい(?)方法です。

蛇足ですが、どうしてPHPでは普通のHTML部分をif条件/ループで
囲んで出力が制御できるのか不思議に思っている方もいらっしゃる
のでは?

これは

<?php if ($condition) { ?>
<tr><td>SOMETHING HERE</td></tr>
<?php } else { ?>
<tr><td>ANYTHING HERE</td></tr>
<?php } ?>

が

<?php
if ($condition) {
 echo '<tr><td>SOMETHING HERE</td></tr>\n';
} else {
 echo '<tr><td>ANYTHING HERE</td></tr>\n';
}
?>

と同じだからです。

--
Yasuo Ohgaki