ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
| この記事の要点 |
|
PHP の改行コード基礎
PHP で文字列に改行を含める方法は複数あります。エスケープシーケンス \n / \r\n / \r、定数 PHP_EOL、Heredoc/Nowdoc などです。
<?php
// ✅ ダブルクォートではエスケープシーケンスが展開される
echo "abc\n"; // abc + LF
echo "abc\r\n"; // abc + CRLF
echo 'abc' . "\n"; // 結合
// ❌ シングルクォートでは展開されない(リテラルの \n が出力される)
echo 'abc\n'; // abc\n (改行されない!)
// ✅ 環境依存定数(Unix では \n、Windows では \r\n)
echo "abc" . PHP_EOL;
// ✅ Heredoc は改行をそのまま含められる
echo <<<EOT
line1
line2
EOT;
改行コード一覧
| 表記 | 名称 | 16進 | 主な OS |
|---|---|---|---|
\n | LF (Line Feed) | 0x0A | Unix / Linux / macOS (X 以降) |
\r\n | CRLF | 0x0D 0x0A | Windows / HTTP / SMTP プロトコル |
\r | CR (Carriage Return) | 0x0D | Mac OS 9 以前(現代では稀) |
PHP_EOL | 環境依存 | 環境次第 | OS に応じて自動切替 |
HTML 出力で改行を反映する: nl2br()
ブラウザは \n を空白として扱うため、フォーム入力の改行をそのまま echo しても見えません。nl2br() で <br /> を挿入します:
<?php
$comment = "1 行目\n2 行目\n3 行目";
// ❌ そのままだとブラウザでは 1 行
echo $comment;
// → 1 行目 2 行目 3 行目
// ✅ nl2br で <br /> を挿入
echo nl2br($comment);
// → 1 行目<br />
// 2 行目<br />
// 3 行目
// XSS 対策とセットで使う
echo nl2br(htmlspecialchars($comment, ENT_QUOTES, 'UTF-8'));
// CRLF / LF / CR すべて対応
echo nl2br("a\r\nb\nc\rd");
// → a<br />
// b<br />
// c<br />
// d
改行コードの正規化
外部ファイル / フォーム入力 / API 受信などで混在する改行コードを統一する定番処理:
<?php
// LF (\n) に統一
function normalizeNewline(string $s): string {
return str_replace(["\r\n", "\r"], "\n", $s);
}
// CRLF (\r\n) に統一(HTTP / メール)
function toCRLF(string $s): string {
$s = str_replace(["\r\n", "\r"], "\n", $s); // 一度 LF 化
return str_replace("\n", "\r\n", $s);
}
// 改行の正規表現
preg_match_all('/\R/u', $text, $matches); // \R は任意の改行
$lineCount = count($matches[0]) + 1;
CSV / TSV / ログ出力での改行
<?php
// CSV は RFC 4180 で CRLF 推奨
$fp = fopen('out.csv', 'w');
fputcsv($fp, ['名前', '年齢']); // 内部で \r\n を使う場合と \n がある
fputcsv($fp, ['田中', 30]);
fclose($fp);
// 明示的に CRLF を入れたい場合
file_put_contents('out.csv', "name,age\r\nTanaka,30\r\n");
// ログ 1 行追記(PHP_EOL で環境依存)
file_put_contents('app.log', date('Y-m-d H:i:s') . " ERROR\n", FILE_APPEND);
// fwrite + PHP_EOL(環境依存)
$fp = fopen('app.log', 'a');
fwrite($fp, "message" . PHP_EOL);
fclose($fp);
Heredoc / Nowdoc での複数行
<?php
$name = '田中';
// Heredoc: ダブルクォート相当(変数展開あり)
$html = <<<HTML
<div>
<p>こんにちは、{$name}さん</p>
<p>本日の天気: 晴れ</p>
</div>
HTML;
// Nowdoc: シングルクォート相当(変数展開なし)
$template = <<<'TPL'
SELECT * FROM users
WHERE name = :name
AND status = 'active'
TPL;
// PHP 7.3+ では終了識別子のインデント可
function buildHtml(string $title): string {
return <<<HTML
<article>
<h1>$title</h1>
</article>
HTML;
}
PHP_EOL vs ハードコード
| シーン | 推奨 | 理由 |
|---|---|---|
| CLI ツールで標準出力 | PHP_EOL | Windows と Unix で適切に改行 |
| HTTP プロトコル ヘッダ | "\r\n" 固定 | RFC 7230 で CRLF 必須 |
| メール (SMTP) 送信 | "\r\n" 固定 | RFC 5322 で CRLF 必須 |
| JSON / SQL / 構造化文字列 | 固定 ("\n") | OS 依存にすると再現性低下 |
| HTML 出力 | nl2br() | ブラウザは改行を空白扱い |
| ファイル書き出し(社内のみ) | "\n" | テキストエディタは両対応 |
JavaScript / 他言語との対比
// JavaScript も同じ
console.log("abc\n"); // LF
console.log("abc\r\n"); // CRLF
console.log(`line1
line2`); // テンプレートリテラルは改行をそのまま含む
// Node.js の改行定数
const os = require('os');
console.log("abc" + os.EOL); // PHP_EOL 相当
よくあるトラブル
| 症状 | 原因 | 対処 |
|---|---|---|
| シングルクォートで改行されない | '\n' はリテラル | ダブルクォートに変更 |
| ブラウザで改行が反映されない | HTML が改行を空白扱い | nl2br() 適用 |
| Windows で改行が変 | LF のみ出力 → メモ帳で 1 行に | CRLF にするか PHP_EOL を使う |
| CSV ファイル化けする | 改行コード不一致 | CRLF + BOM 付き UTF-8 |
| メール送信失敗 | ヘッダの改行が LF のみ | "\r\n" 固定で出力 |
FAQ
Q: echo "\n" と print("\n") はどちらが速い?
A: echo の方が微妙に速い(言語構造なので関数呼び出しオーバーヘッドが無い)。可読性で選んで問題なし。
Q: nl2br() は元の改行を消す?
A: 消しません。<br />\n のように元の改行を残して <br> を挿入します。HTML ソースを綺麗に保ちたい場合は意図通り。
Q: ヒアドキュメント内で $var を展開させたくない
A: Nowdoc(識別子をシングルクォートで囲む <<<'TPL')を使えば一切展開されません。
ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
子ページ
子ページはありません
同階層のページ
- インストール方法
- 文法
- Composerのインストール
- 内部関数
- フレームワーク
- エラー一覧
- 改行出力
- printとechoの違い
- シングルクォートとダブルクォートの違い
- returnとyieldの違い
- var_dumpをログ出力
- CSV読み込み
- 待機・処理の遅延
- ログファイルにエラーを出力する方法
- エラーログ出力関数
- URLパラメータの配列化
- empty, is_null. issetの判定比較表
- httpステータスコードの付与
- バージョンの確認
- php.ini
- APIを呼び出す方法
- 外部ファイルを呼び出す方法
- カンマ区切りの文字列を配列に変換
- 配列からランダムに値を取り出す方法
- Webスクレイピング
人気ページ
- 1 Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法
- 2 tomcat の起動 / 停止ログと catalina.log・catalina.out の違い
- 3 JavaScript base URL 取得方法|window.location.origin と SSR/Node.js 対応
- 4 YouTube Data API v3 エラー一覧|403/400/404 の主要原因と切り分け
- 5 Spring Frameworkのアノテーション一覧
- 6 Laravel エラー一覧|500/Blade/DB 接続/ルーティングの代表エラー
- 7 3Dグラフィックスとは|モデリング/レンダリング/主要ソフトウェア (Blender / Maya)
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- IPv6とは|128bitアドレス・コロン16進表記/::省略・リンクローカル・SLAAC・デュアルスタック NEW 2026-06-22 12:34:44
- MAC アドレスフィルタリングの仕組みと限界 | ネットワーク入門 NEW 2026-06-22 12:19:10
- VPNとは|暗号トンネル・サイト間/リモートアクセス・IPsec/SSL-VPN/WireGuardを解説 NEW 2026-06-22 12:19:10
- WebSocket とは 全二重リアルタイム通信 ws/wss | ネットワーク入門 NEW 2026-06-22 12:17:25
- HTTP/2 とは 多重化・HPACK・バイナリフレーム | ネットワーク入門 NEW 2026-06-22 12:17:25
- Web通信プロトコル入門 HTTP/2・HTTP/3・WebSocket・gRPC・WebRTC | ネットワーク入門 NEW 2026-06-22 12:17:25
- gRPC とは HTTP/2 + Protocol Buffers の高速 RPC | ネットワーク入門 NEW 2026-06-22 12:17:25
- HTTP/3 (QUIC) とは UDP ベースの低遅延 Web 通信 | ネットワーク入門 NEW 2026-06-22 12:17:25
- WebRTC とは ブラウザ間 P2P の音声・映像・データ通信 | ネットワーク入門 NEW 2026-06-22 12:17:25
- 証明書と認証局(CA)とは|X.509・信頼チェーン・DV/OV/EV・失効(CRL/OCSP)を解説 NEW 2026-06-22 12:17:24
- ファイアウォールとは|パケットフィルタ・ステートフル・DMZ・次世代FW(L4/L7)を解説 NEW 2026-06-22 12:17:24
- iptables/nftablesとは|テーブル・チェーン・ルール例・永続化をLinux視点で解説 NEW 2026-06-22 12:17:24
- HAProxy とは frontend/backend と設定例 | ネットワーク入門 NEW 2026-06-22 12:17:24
- TLS/SSLの仕組み|ハンドシェイク・暗号スイート・前方秘匿性・証明書検証をわかりやすく解説 NEW 2026-06-22 12:17:24
- CDN とは エッジキャッシュ・TTL・Cloudflare/CloudFront | ネットワーク入門 NEW 2026-06-22 12:17:24
コメントを削除してもよろしいでしょうか?