3

PHP スクリプトを使用して、末尾の行 mac (CR : \r) を windows (CRLF : \r\n) に変換できるかどうかを知りたいです。

実際、私のコンピューターで定期的に実行され、FTP サーバーにいくつかのファイルをアップロードする php スクリプトがあり、アップロードの前に最後の行を変更する必要があります。手動で行うのは簡単ですが、自動で行いたいです。

4

5 に答える 5

6

次のような単純な正規表現を使用できますか?

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
于 2013-08-22T09:28:17.667 に答える
2

基本的にファイルを文字列にロードし、次のようなものを呼び出します:

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 には、さらに調整が必要な場合があります。

編集:重複した置換を削除するロジックを修正しました。

于 2013-08-22T09:16:22.833 に答える