Quebras de Linha Eco PHP
-
05-07-2019 - |
Pergunta
Qual é a diferença entre \ n e \ r (eu sei que tem algo a ver com OS), e qual é a melhor maneira de ecoar uma quebra de linha que irá trabalhar de plataforma cruzada?
EDIT: Em resposta a Jarod, eu vou estar usando ths para ecoar uma quebra de linha em um arquivo de log .txt, embora eu tenho certeza que vou usá-lo no futuro para coisas como ecoando HTML Makup em uma página.
Solução
-
\n
é uma quebra de linha Linux / Unix. -
\r
é um clássico Mac OS (não-OS X) de quebra de linha. Mac OS X usa o acima unix\n
. -
\r\n
é uma quebra de linha do Windows.
Eu costumo usar apenas \n
em nossos sistemas Linux e mais aplicativos do Windows lidar com isso ok de qualquer maneira.
Outras dicas
Use a constante PHP_EOL
, que é automaticamente definida para a quebra de linha correto para o sistema operacional que o script PHP está sendo executado.
Note que esta constante é declarada desde o PHP 5.0.2.
<?php
echo "Line 1" . PHP_EOL . "Line 2";
?>
Para compatibilidade com versões anteriores:
if (!defined('PHP_EOL')) {
switch (strtoupper(substr(PHP_OS, 0, 3))) {
// Windows
case 'WIN':
define('PHP_EOL', "\r\n");
break;
// Mac
case 'DAR':
define('PHP_EOL', "\r");
break;
// Unix
default:
define('PHP_EOL', "\n");
}
}
A resposta de Jarod contém o uso correto de \ r \ n em vários OS do. Aqui está um pouco de história:
- \ r, ou o caráter ASCII com código decimal 13, é nomeado CR depois de "retorno de carro".
- \ n, ou o caráter ASCII com código decimal 10, é chamada de "nova linha", ou LF depois de "line feed".
A terminologia "retorno de carro" e "line feed" remonta a quando teletypes foram usados ??em vez dos terminais com monitor e teclado. Com relação à teletypes ou máquinas de escrever, "retorno de carro" significava mover o cursor e retornando para a primeira coluna de texto, enquanto "line feed" significa girar o rolo para entrar na seguinte linha. Naquela época a distinção fazia sentido. Hoje as combinações \ n, \ r \ r \ n para representar o fim de uma linha de texto são completamente arbitrários.
No retrocompatibilidade necessária para PHP_EOL em PHP4.
Necessidade de afirmação correta de Moore sobre a disponibilidade PHP_EOL constante: ". ... é declarado desde o PHP 5.0.2"
Não, tem sido em torno desde o PHP 4.3.10. Qualquer pessoa que ainda está em execução qualquer coisa menor do que isso não deve ser em negócios de qualquer maneira. A partir de hoje ninguém deve estar usando qualquer coisa menor do que PHP 5!