PHP スクリプトを使用して、末尾の行 mac (CR : \r) を windows (CRLF : \r\n) に変換できるかどうかを知りたいです。
実際、私のコンピューターで定期的に実行され、FTP サーバーにいくつかのファイルをアップロードする php スクリプトがあり、アップロードの前に最後の行を変更する必要があります。手動で行うのは簡単ですが、自動で行いたいです。
PHP スクリプトを使用して、末尾の行 mac (CR : \r) を windows (CRLF : \r\n) に変換できるかどうかを知りたいです。
実際、私のコンピューターで定期的に実行され、FTP サーバーにいくつかのファイルをアップロードする php スクリプトがあり、アップロードの前に最後の行を変更する必要があります。手動で行うのは簡単ですが、自動で行いたいです。
次のような単純な正規表現を使用できますか?
function normalize_line_endings($string) {
return preg_replace("/(?<=[^\r]|^)\n/", "\r\n", $string);
}
これはおそらく最も洗練された、または最速のソリューションではありませんが、かなりうまく機能するはずです (つまり、文字列内の既存の Windows (CRLF) 行末を台無しにすることはありません)。
説明
(?<= - Start of a lookaround (behind)
[^\r] - Match any character that is not a Carriage Return (\r)
| - OR
^ - Match the beginning of the string (in order to capture newlines at the start of a string
) - End of the lookaround
\n - Match a literal LineFeed (\n) character
基本的にファイルを文字列にロードし、次のようなものを呼び出します:
function normalize($s) {
// Normalize line endings
// Convert all line-endings to UNIX format
$s = str_replace(array("\r", "\n"), "\r\n", $s);
// Don't allow out-of-control blank lines
$s = preg_replace("/\r\n{2,}/", "\r\n\r\n", $s);
return $s;
}
これはhereのスニペットです。最後の regeg には、さらに調整が必要な場合があります。
編集:重複した置換を削除するロジックを修正しました。