PHP - bagaimana cara membuat karakter baris baru?

405

Di PHP saya mencoba membuat karakter baris baru:

echo $clientid;
echo ' ';
echo $lastname;
echo ' ';
echo '\r\n';

Setelah itu saya membuka file yang dibuat di Notepad dan menulis baris baru secara harfiah:

1 John Doe \ r \ n 1 John Doe \ r \ n 1 John Doe \ r \ n

Saya sudah mencoba banyak variasi \r\n, tetapi tidak ada yang berhasil. Mengapa baris baru tidak berubah menjadi baris baru?

davidjhp
sumber

Jawaban:

639

Hanya string yang dikutip ganda menafsirkan urutan pelarian \rdan \nmasing-masing sebagai '0x0D' dan '0x0A', jadi Anda ingin:

"\r\n"

String dikutip tunggal , di sisi lain, hanya tahu urutan melarikan diri \\dan \'.

Jadi, kecuali Anda menggabungkan string yang dikutip tunggal dengan satu baris yang dihasilkan di tempat lain (misalnya, menggunakan string ganda yang dikutip "\r\n"atau menggunakan chrfungsi chr(0x0D).chr(0x0A) ), satu-satunya cara lain untuk memiliki garis yang pecah dalam string tunggal yang dikutip adalah dengan mengetikkannya secara harfiah dengan editor Anda:

$s = 'some text before the line break
some text after';

Pastikan untuk memeriksa editor Anda untuk pengaturan pemecah barisnya jika Anda memerlukan beberapa urutan karakter tertentu ( \r\nmisalnya).

Gumbo
sumber
1
@Pacerier Satu-satunya cara agar carriage return dan karakter baris baru dalam string yang dikutip adalah memasukkan karakter secara langsung melalui keyboard (tekan Enter, tergantung pada pengaturan editor Anda pada akhir baris). Kalau tidak, hanya menggunakan penggabungan string.
Gumbo
1
@ Gumbo: Anda mengatakan string dikutip tunggal, di sisi lain, hanya tahu urutan melarikan diri \\ dan \ '. Tapi saya baru saja mencetak baris dengan gema sebagai <? Php echo 'Anda menggunakan Internet Explorer. <br>'; gema 'Baris baru ditambahkan'; ?> dan melihat output di browser. Secara harfiah menambahkan baris baru antara dua string yang saya tampilkan. Ini berarti karakter <br> atau <br/> akan diperluas dalam string yang dikutip tunggal. Apakah ada karakter HTML lain selain dari ketiga yang dapat dipahami oleh PHP di dalam string yang dikutip tunggal? Saya mohon Anda untuk memperbarui jawaban Anda sesuai. Terima kasih.
PHPFan
1
@ user2839497 Apa yang Anda katakan tidak masuk akal. Tidak ada konteks browser di sini. Dan tentu saja browser membuat baris baru ketika menemukan <br/>. Dan tentu saja tidak ada yang mencegah Anda menambahkan '<br/>' dalam satu string yang dikutip. Tapi itu tidak membuat baris baru dalam file teks sederhana.
Fencer
1
@Pacerier Untuk kebijakan kutipan tunggal alih-alih membuat string di editor seperti yang disarankan Gumbo dalam komentarnya, Anda dapat menggunakan solusi lain dalam jawaban Gumbos, contoh: 'menghasilkan garis baru'.chr (0x0A).' Dalam string yang dikutip tunggal '
Fencer
2
Anda harus menggunakan PHP_EOLbukannya
kurdtpage
234

Gunakan PHP_EOLkonstanta yang telah ditentukan :

echo $clientid, ' ', $lastname, PHP_EOL;

Nilai konstan akan ditetapkan sesuai dengan ujung jalur sistem operasi tempat PHP dijalankan. Di Linux, itu akan menjadi "\n"; pada Windows, itu akan menjadi "\r\n".

nnevala
sumber
97

Perintah "echo" dalam PHP mengirimkan output ke browser sebagai html mentah sehingga meskipun dalam tanda kutip ganda browser tidak akan menguraikannya menjadi dua baris karena karakter baris baru dalam HTML tidak berarti apa-apa. Itu sebabnya Anda harus menggunakan:

echo [output text]."<br>";

saat menggunakan "echo", atau sebaliknya menggunakan fwrite ...

fwrite([output text]."\n");

Ini akan menampilkan baris HTML baru sebagai pengganti "\ n".

davea0511
sumber
4
Dengan pertanyaan yang diajukan, ada kemungkinan bahwa ia mengeluarkan data ini ke kotak teks atau javascript, dll. Untuk penguraian atau pembacaan teks biasa tidak diterjemahkan sebagai HTML
PC3TJ
43

Gunakan PHP_EOL yang konstan untuk mendapatkan karakter yang tepat, apa pun platformnya.

http://us3.php.net/manual/en/reserved.constants.php

Contoh penggunaan sederhana:

<?php
$data = 'First line' . PHP_EOL .
        'Second line' . PHP_EOL .
        'Third line';

file_put_contents("filename.txt", $data);
?>
Salvi Pascual
sumber
23

String antara tanda kutip ganda ""interpolasi, artinya mereka mengkonversi karakter yang lolos menjadi karakter yang dapat dicetak.

String antara tanda kutip tunggal ''adalah literal, artinya mereka diperlakukan persis seperti karakter yang diketikkan.

Anda dapat memiliki keduanya di baris yang sama:

echo '$clientid $lastname ' . "\r\n";
echo "$clientid $lastname \r\n";

output:

$clientid $lastname
1 John Doe
Kevin S. Miller
sumber
Penjelasan Anda tentang berbagai jenis notasi string di PHP baik-baik saja karena menunjukkan kesalahan yang dibuat oleh penulis pertanyaan. Tetapi sampel kode Anda tidak akan menghasilkan hasil yang diharapkan karena variabel digunakan dalam string yang dikutip tunggal dan, seperti yang Anda sebutkan, mereka tidak akan diinterpolasi!
Damien Flament
@ Damen Flament, Itulah yang saya katakan - isi antara tanda kutip tunggal tidak diinterpolasi, tetapi isi antara tanda kutip ganda. Mungkin contoh saya membingungkan karena Anda mengharapkan untuk melihat isi $ clientid dan $ lastname, daripada literal "$ clientid" dan "$ lastname". Saya pikir ini adalah judul tabel yang saya gunakan saat debugging. baris berikut seharusnyaecho "$clientid $lastname\r\n"
Kevin S. Miller
Saat menulis "hasil yang diharapkan", saya berbicara tentang hasil yang diharapkan penulis pertanyaan dalam pertanyaannya. Menambahkan kode yang ditunjukkan pada komentar Anda ke jawaban Anda dan menunjukkan hasilnya dapat meningkatkan kualitas jawaban Anda.
Damien Flament
15

Anda harus menggunakan ini:

"\n"

Anda juga mungkin ingin melihat PHP EOL .

Wouter Dorgelo
sumber
13

Sebenarnya \r\nuntuk sisi html dari output. Dengan karakter itu, Anda bisa membuat baris baru di kode html agar lebih mudah dibaca:

echo "<html>First line \r\n Second line</html>";

akan menampilkan:

<html>First line
Second line</html>

yang melihat halaman adalah:

First line Second line

Jika Anda benar-benar memaksudkan ini, Anda hanya perlu memperbaiki kutipan tunggal dengan kutipan "":

echo "\r\n";

Kalau tidak, jika Anda bermaksud membagi teks, dalam sampel kami 'Baris pertama' dan 'Baris kedua' Anda harus menggunakan kode html <br />::

First line<br />Second line

yang akan menampilkan:

First line
Second line

Juga akan lebih mudah dibaca jika Anda mengganti seluruh skrip dengan:

echo "$clientid $lastname \r\n";
Sepatu
sumber
1
Tidak, seharusnya tidak. Karena sebagian besar salah. Blok kode pertama akan dirender sebagai First line Second line- spasi putih apa pun termasuk baris baru akan dikompres ke satu karakter spasi dalam output yang diberikan. Juga, </br>apa pun selain HTML yang valid.
D_4_ni
1
Juga perlu diingat jika Anda mengirim email teks dengan skrip php Anda, Anda masih akan membutuhkan akhiran baris itu alih-alih istirahat (<br>)
KennyV
9

w3school menawarkan cara ini:

echo nl2br("One line.\n Another line.");

dengan menggunakan fungsi ini Anda dapat melakukannya..saya mencoba cara lain yang mengatakan di atas tetapi mereka tidak akan membantu saya ..

amin gholami
sumber
Pertanyaannya bukan tentang melanggar garis dalam paragraf dalam HTML. Ini tentang karakter baris baru !
Damien Flament
Untuk konteks, nl2br()fungsi mengubah karakter baris baru ke <br />tag HTML. Ini mungkin berguna untuk membuat baris baru pada halaman browser, tetapi bukan baris baru dalam file teks, atau JavaScript, atau mencetak ke layar atau konsol.
SherylHohman
4

Untuk beberapa alasan, setiap posting yang menanyakan tentang pelarian baris baru di PHP gagal menyebutkan kasus bahwa memasukkan baris baru ke dalam string yang dikutip tunggal akan melakukan apa yang Anda pikirkan:

ex 1.

 echo 'foo\nbar';

Contoh 1 jelas tidak mencetak hasil yang diinginkan, namun, meskipun benar Anda tidak dapat keluar dari baris baru dalam tanda kutip tunggal, Anda dapat memilikinya:

ex 2.

 echo 'foo
 bar';

Contoh 2 memiliki perilaku yang persis diinginkan. Sayangnya baris baru yang dimasukkan bergantung pada sistem operasi. Ini biasanya bukan masalah, karena browser / server web akan menafsirkan baris baru dengan benar apakah itu \ r, \ r \ n, atau \ n.

Jelas solusi ini tidak ideal jika Anda berencana untuk mendistribusikan file melalui cara lain kemudian browser web dan ke beberapa sistem operasi. Dalam hal ini Anda harus melihat salah satu jawaban lainnya.

Catatan: menggunakan editor teks kaya fitur, Anda harus dapat menyisipkan baris baru sebagai karakter biner yang mewakili baris baru pada sistem operasi yang berbeda dari yang mengedit file. Jika semuanya gagal, cukup gunakan hex editor untuk memasukkan karakter ascii biner.

pengguna2574384
sumber
3

Gunakan PHP nl2br untuk mendapatkan baris baru dalam string teks ..

$ text = "Manu adalah anak yang baik. (Masukkan) Dia bisa kode dengan baik.

echo nl2br ($ text);

Hasil.

Manu adalah anak yang baik.

Dia bisa kode dengan baik.

Manu RS
sumber
1
The nl2brFungsi mengkonversi karakter baris baru ke <br />tag HTML. Jika string tidak mengandung karakter baris baru, fungsi ini tidak akan melakukan apa pun! Selain itu pertanyaannya bukan tentang melanggar garis dalam paragraf dalam HTML. Ini tentang karakter baris baru !
Damien Flament
2

Saya juga telah mencoba kombinasi ini baik dalam harga tunggal maupun ganda. Tapi tidak ada yang berhasil. Alih-alih menggunakan \nlebih baik digunakan <br/>dalam tanda kutip ganda. Seperti ini..

$variable = "and";
echo "part 1 $variable part 2<br/>";
echo "part 1 ".$variable." part 2";
phphunger
sumber
Pertanyaannya bukan tentang melanggar garis dalam paragraf dalam HTML. Ini tentang karakter baris baru !
Damien Flament
2

Gunakan chr (13) untuk carriage return dan chr (10) untuk jalur baru

echo $clientid;
echo ' ';
echo $lastname;
echo ' ';
echo chr (13). chr (10);
Ariful Islam Rajib
sumber
2

Untuk pernyataan gema, saya selalu menggunakan <br>dalam tanda kutip ganda.

Matthew Park
sumber
2
Pertanyaannya bukan tentang melanggar garis dalam paragraf dalam HTML. Ini tentang karakter baris baru !
Damien Flament
1

Tidak ada yang berhasil untuk saya.

PHP_EOL

. "\r\n";

$NEWLINE_RE = '/(\r\n)|\r|\n/'; // take care of all possible newline-encodings in input file
$var = preg_replace($NEWLINE_RE,'', $var);

Bekerja untuk saya:

$admin_email_Body = $admin_mail_body .'<br>' ."\r\n";
$admin_email_Body .= 'This is line 2 <br>' ."\r\n";
$admin_email_Body .= 'This is line 3 <br>' ."\r\n";
Motahar Hossain
sumber
0

You Can Try This.
<?php
   $content = str_replace(PHP_EOL, "<br>", $your_content);
 ?>
 
<p><?php echo($content); ?></p>

Tariqul_Islam
sumber