改行コードの統一
統一する
-
- 一番下のmpyw氏のコメント参照
置換候補に同じ文字が含まれるため、str_replace()
ではうまくいかない。たとえば「\r\n
」「\r
」「\n
」を「\r\n
」に統一したい時、「\r\n
」は「\r\n
」のままにならなくてはいけないのに、再帰的に変換されて「\r\n\r\n
」となる。
strtr($string, $convertArray)
なら、一度置換した箇所は再置換されないという特徴を持つ。置換順も、自動的に検索文字列長が長い順にしてくれる。
$to = "\r\n"; strtr($str, [ "\r\n" => $to, "\r" => $to, "\n" => $to, ]);
単純な置換は以下が速いらしい。
- 1バイト⇒1バイト文字の置換
strtr($string, 'abc', 'ABC')
- 複数バイト文字の置換、再帰的に変換される心配はない
str_replace(['a', 'b', 'c'], ['AA', 'BB', 'CC'], $string)
- 複数バイト文字の置換、再帰的な変換を避ける
strtr($string, ['a' ⇒ 'AA', 'A' ⇒ 'aa'])
brに置換する
専用の関数がある
nl2br($str); nl2br(htmlspecialchars($str));