web-dev-qa-db-fra.com

PHP Sauts de ligne (\ n) ne fonctionne pas

Pour une raison quelconque, je ne peux pas utiliser \n pour créer un saut de ligne lors de la sortie vers un fichier avec PHP. Il écrit simplement "\n "dans le fichier. J'ai essayé d'utiliser" \\n "aussi, où il écrit juste"\n "(comme prévu). Mais je ne peux pas pour la vie de moi comprendre pourquoi l'ajout\n à mes chaînes ne crée pas de nouvelles lignes. J'ai aussi essayé \r\n mais il ajoute simplement "\r\n "à la ligne du fichier.

Exemple:

error_log('test\n', 3, 'error.log');
error_log('test2\n', 3, 'error.log');

Les sorties:

test\ntest2\n

Utiliser MAMP sur OSX au cas où cela compte (une sorte de chose PHP config chose peut-être?).

Aucune suggestion?

31
ggutenberg

Utilisez des guillemets doubles. "test\n" fonctionnera très bien (ou utilisez 'test' . PHP_EOL).

Si la chaîne est placée entre guillemets ("), PHP interprétera plus de séquences d'échappement pour les caractères spéciaux:

http://php.net/manual/en/language.types.string.php

49
ceejayoz

\n n'est pas censé être vu comme une nouvelle ligne par l'utilisateur final, vous devez utiliser le html <br/> élément pour cela./n affecte uniquement la façon dont le code HTML généré par php apparaît dans le code source de la page Web. si vous allez sur votre page Web et cliquez sur "voir la source", vous verrez le code HTML généré par php comme une longue ligne. Pas beau. C'est ce que \n est pour ; pour diviser ce code HTML généré par php en lignes plus courtes. Le but de \n est de créer une plus jolie page de "visualisation de la source".

26
Huraiby

Lorsque vous exécutez un script PHP dans un navigateur, il sera rendu en HTML par défaut. Si les livres que vous utilisez affichent le contraire, alors le code ou l'illustration est inexact. Vous pouvez utilisez "voir la source" pour voir ce qui a été envoyé au navigateur et vous verrez que vos sauts de ligne sont présents.

<?php
echo "Line 1\nLine 2";
?>

Cela s'affichera dans votre navigateur comme:

Line 1 Line 2

Si vous devez envoyer du texte brut à votre navigateur, vous pouvez utiliser quelque chose comme:

<?php
header('Content-type: text/plain');
echo "Line 1\nLine 2";
?>

Cela produira:

Line 1
Line 2
8
nilesh

Je suis sûr que vous sortez dans un fichier html. Le problème est que html ignore les sauts de ligne dans la source, ce qui signifie que vous devez remplacer les sauts de ligne par <br/> si vous voulez une nouvelle ligne dans l'affichage de la page résultante.

6
Souhaieb Besbes

nl2br() utilisation de la fonction pour créer une nouvelle ligne

echo nl2br("Welcome\r\n This is my HTML document", false);

L'exemple ci-dessus affichera:

Bienvenue
Ceci est mon document HTML

4
Pankaj Monga

Vous devez utiliser des guillemets doubles. Les guillemets doubles ont plus de caractères d'échappement.

error_log("test\n", 3, 'error.log');
error_log("test2\n", 3, 'error.log');
3
oshirowanen

pour placer le \n entre guillemets


$LOG = str_replace('\n', "\n", $LOG);
2
aaron

C'est parce que vous utilisez des apostrophes ('). Utilisez des guillemets (") à la place. 'Invite PHP à utiliser littéralement tout ce qui se trouve entre les apostrophes.

2
Jan Kuboschek

Les guillemets doubles sont ce que vous voulez. Les guillemets simples ignorent le \ échapper. Les guillemets doubles évalueront également les expressions variables pour vous.

Vérifiez cette page dans le manuel php pour en savoir plus.

2
Matt Stephenson

Si vous souhaitez imprimer quelque chose comme ça avec une nouvelle ligne (\ n) après:

<p id = "theyateme">Did it get eaten?</p>

Pour imprimer ce qui précède, vous devez procéder comme suit:

<?php
  print('<p id = "theyateme">Did it get eaten?</p>' . "\n");
?>

Le code client ci-dessus serait:

<p id = "theyateme">Did it get eaten?</p>

La sortie ci-dessus serait:

At-il été mangé?

Je sais que c'est difficile, mais je toujours fais comme ça, et toi presque doit toujours le faire de cette façon.

Parfois, vous voulez PHP pour imprimer\n sur la page au lieu de donner une nouvelle ligne, comme dans le code JavaScript (généré par PHP).

NOTE sur la réponse: Vous pourriez être comme: Pourquoi avez-vous utilisé l'impression au lieu de l'écho (j'aime mon écho). C'est parce que je préfère l'impression à l'écho et à printf, car cela fonctionne mieux dans certains cas (mes cas généralement), mais cela peut être bien fait avec l'écho dans ce cas.

0
Ewer Ling