Yeni satır karakteri nasıl oluşturulur?


405

PHP'de bir satırsonu karakteri oluşturmaya çalışıyorum:

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

Daha sonra oluşturulan dosyayı Not Defteri'nde açıyorum ve yeni satırı kelimenin tam anlamıyla yazıyor:

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

Ben birçok varyasyon denedim \r\n, ama hiçbiri işe yaramaz. Neden yeni satır yeni satır haline gelmiyor?


Yanıtlar:


638

Sadece çift tırnaklı dizeleri çıkış sıralarını yorumlamak \rve \nistediğiniz böylece '0x0D' ve sırasıyla '0x0A' olarak:

"\r\n"

Tek alıntı dizeleri , diğer taraftan, sadece çıkış sıralarını bilmek \\ve \'.

Bu nedenle, tek tırnaklı dizeyi başka bir yerde oluşturulan bir satır sonu ile birleştirmediğiniz sürece (örn., Çift tırnaklı dize "\r\n"kullanma veya chrişlev kullanma chr(0x0D).chr(0x0A)), tek tırnaklı bir dize içinde satır sonu almanın diğer tek yolu bunu tam olarak düzenleyicinizle yazmaktır:

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

Belirli bir karakter dizisine ( \r\nörneğin) ihtiyacınız varsa düzenleyicinizi satır sonu ayarları için kontrol ettiğinizden emin olun .


1
@Pacerier Alıntılanan tek bir dizede satır başı ve yeni satır karakterleri almanın tek yolu, karakterleri doğrudan klavye aracılığıyla girmektir (satır sonlarındaki editör ayarlarına bağlı olarak Enter tuşuna basın). Aksi takdirde dize birleştirmeyi kullanın.
Gumbo

1
@ Gumbo: Diğer yandan tek tırnaklı dizeler söylüyorsunuz, sadece \\ ve \ 'kaçış dizilerini biliyorsunuz. Ama ben sadece <? Php echo 'Internet Explorer kullanıyorsunuz. <br>' olarak echo ile bir satır yazdırdım. echo 'Yeni satır eklendi'; ?> ve tarayıcıda çıktı gördüm. Kelimenin tam anlamıyla görüntülediğim iki dize arasına yeni satır ekledi. <br> veya <br/> karakterinin tek tırnaklı dizede genişlemesi anlamına gelir. Bu üç karakter dışında PHP tarafından tek tırnaklı dizgiler içinde anlaşılabilecek başka HTML karakterleri var mı? Cevabınızı buna göre güncellemenizi rica ediyorum. Teşekkür ederim.
PHPFan

1
@ user2839497 Söylediklerinizin bir anlamı yok. Burada tarayıcı bağlamı yok. Ve elbette tarayıcı bir karşılaşma sırasında yeni bir satır oluşturur. Ve elbette tek tırnaklı bir dizeye '<br/>' eklemenizi engelleyen hiçbir şey yok. Ancak bu, basit bir metin dosyasında yeni satır oluşturmaz.
Fencer

1
@Pacerier Editörde, yorumunda önerilen Gumbo gibi dizeyi kırmak yerine tek bir teklif politikası için, Gumbos yanıtındaki diğer çözümü kullanabilirsiniz, örneğin: 'yeni satır çıktısı'.chr (0x0A).' Tek tırnaklı dize '.
Fencer

2
Bunun PHP_EOLyerine kullanmalısınız
kurdtpage

234

Önceden tanımlanmış PHP_EOLsabiti kullanın :

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

Sabit değer PHP'nin yürüttüğü işletim sisteminin satır sonlarına göre ayarlanır. Linux'ta "\n"; Windows üzerinde olacak "\r\n".


96

PHP'deki "echo" komutu, çıktıyı tarayıcıya raw html olarak gönderir, bu nedenle çift tırnaklarda bile tarayıcı iki satıra ayrıştırmaz çünkü HTML'deki yeni satır karakteri hiçbir şey ifade etmez. Bu nedenle aşağıdakilerden birini kullanmanız gerekir:

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

"echo" kullanırken veya bunun yerine fwrite ...

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

Bu, "\ n" yerine HTML satırsonu çıktılar.


4
Bu arada sayesinde soru muhtemelen o ayrıştırma veya düz metin, HTML olarak işlenecek değil okumak için vs. bir metin veya javascript, ya bu verileri çıkış olanağı olmasıdır sorulur
PC3TJ


23

Çift tırnak işaretleri arasındaki dizeler ""enterpolate olur, yani kaçan karakterleri yazdırılabilir karakterlere dönüştürür.

Tek tırnak işaretleri arasındaki dizeler ''değişmezdir, yani tam olarak karakterler yazılırken ele alınırlar.

Her ikisine de aynı hatta sahip olabilirsiniz:

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

çıktılar:

$clientid $lastname
1 John Doe

Soru yazarı tarafından yapılan hatayı gösterdiğinden, PHP'deki farklı dize gösterimleri türleri hakkında açıklamanız iyi. Ancak kod örneğiniz, değişkenler tek tırnaklı bir dizede kullanıldığından beklenen sonucu vermeyecektir ve belirttiğiniz gibi enterpolasyon yapılmayacaktır!
Damien Flament

@Damien Flament, Ben de öyle dedim - tek tırnak işaretleri arasındaki içerik enterpolasyonlu değil, çift tırnak işaretleri arasındaki içerikler. Belki benim örneğim kafa karıştırıcıdır, çünkü "$ clientid" ve "$ lastname" değişmezleri yerine $ clientid ve $ lastname içeriğini görmeyi umuyorsunuz. Bunun hata ayıklama sırasında kullandığım bir tablonun başlığı olduğunu düşünüyorum. Aşağıdaki satırlarecho "$clientid $lastname\r\n"
Kevin S. Miller

"Beklenen sonuç" yazarken, yazarın sorusunda beklediği sonuçtan bahsediyorum. Yorumunuzda gösterilen kodu cevabınıza eklemek ve sonucu göstermek cevap kalitenizi artırabilir.
Damien Flament


13

Aslında \r\nçıktının html tarafı içindir. Bu karakterlerle, daha okunabilir hale getirmek için html kodunda yeni bir satır oluşturabilirsiniz:

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

çıktı olacak:

<html>First line
Second line</html>

sayfayı görüntülemenin:

First line Second line

Eğer gerçekten bunu kastettiyseniz, tek alıntıyı "" alıntısıyla düzeltmeniz gerekir:

echo "\r\n";

Aksi takdirde, metni bölmek istiyorsanız, 'İlk satır' ve 'İkinci satır' örneğimizde html kodunu kullanmanız gerekir <br />:

First line<br />Second line

Bu çıktı:

First line
Second line

Ayrıca tüm betiği aşağıdakilerle değiştirirseniz daha okunabilir olacaktır:

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

1
Hayır, olmamalı. Çünkü çoğunlukla yanlış. İlk kod bloğu şu şekilde oluşturulur: First line Second lineyeni satırlar dahil tüm boşluklar, işlenen çıktıdaki bir boşluk karakterine sıkıştırılır. Ayrıca, </br>geçerli HTML dışında bir şey.
D_4_ni

1
Ayrıca php komut dosyanızla metin e-postaları gönderiyorsanız, yine de molalar yerine bu satır sonlarına ihtiyacınız olacaktır (<br>)
KennyV

9

w3school şu şekilde teklif etti:

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

Bu işlevi kullanarak bunu yapabilirsiniz .. ben yukarıda dedi başka yollar denedim ama onlar bana yardım alışkanlık ..


Soru, HTML'deki bir paragraf içindeki bir satırı bölmektir. Yeni satır karakteri hakkında !
Damien Flament

Bağlam için, nl2br()işlev yeni satır karakterlerini <br />HTML etiketine dönüştürür . Bu, tarayıcı sayfalarında yeni satır oluşturmak için yararlı olabilir, ancak metin dosyalarında veya JavaScript'te yeni satır oluşturmak veya ekrana veya konsola yazdırmak için yararlı olmayabilir.
SherylHohman

4

Nedense, PHP'de satırsonu kaçışlarını soran her yazı sadece tek tırnaklı dizelere satırsonu eklemenin tam olarak düşündüğünüzü yapacağından bahsetmez:

örnek 1.

 echo 'foo\nbar';

Örnek 1 istenen sonucu açıkça yazdırmaz, ancak tek tırnak içinde yeni satırdan kaçamayacağınız doğru olsa da, bir tanesine sahip olabilirsiniz:

örnek 2.

 echo 'foo
 bar';

Örnek 2 tam olarak istenen davranışa sahiptir. Maalesef, eklenen yeni satır işletim sistemine bağlıdır. Web tarayıcıları / sunucuları yeni satırı \ r, \ r \ n veya \ n olsun doğru yorumlayacağından, bu genellikle bir sorun oluşturmaz.

Açıkçası bu çözüm, dosyayı bir web tarayıcısı ve birden çok işletim sistemine başka yollarla dağıtmayı planlıyorsanız ideal değildir. Bu durumda diğer cevaplardan birini görmelisiniz.

not: zengin özelliklere sahip bir metin editörü kullanarak, ikili bir karakter (ler) olarak, dosyayı düzenleyenden farklı bir işletim sisteminde yeni satırı temsil eden bir satır ekleyin. Her şey başarısız olursa, ikili ascii karakteri eklemek için bir hex editörü kullanmak yeterlidir.


3

Bir metin dizesindeki yeni satırları almak için PHP nl2br kullanın.

$ text = "Manu iyi bir çocuk. (Enter) İyi kodlayabilir.

echo nl2br ($ text);

Sonuç.

Manu iyi bir çocuk.

İyi kodlayabilir.


1
nl2brFonksiyon için yeni satır karakterlerini dönüştürür <br />HTML etiketinin. Dize herhangi bir yeni satır karakteri içermiyorsa, bu işlev hiçbir şey yapmaz! Dahası, soru HTML'deki bir paragraf içindeki bir çizgiyi kırmakla ilgili değildir. Yeni satır karakteri hakkında !
Damien Flament

2

Bu kombinasyonu hem tek tırnak hem de çift tırnak içinde denedim. Ama hiçbiri işe yaramadı. Çift tırnak içinde \ndaha iyi kullanmak yerine <br/>. Bunun gibi..

$variable = "and";
echo "part 1 $variable part 2<br/>";
echo "part 1 ".$variable." part 2";

Soru, HTML'deki bir paragraf içindeki bir satırı bölmektir. Yeni satır karakteri hakkında !
Damien Flament

2

Satır başı için chr (13) ve yeni satır için chr (10) kullanın

echo $clientid;
echo ' ';
echo $lastname;
echo ' ';
echo chr (13). chr (10);

2

Herhangi bir yankı ifadesi için her zaman <br>çift ​​tırnak içinde kullanırım .


2
Soru, HTML'deki bir paragraf içindeki bir satırı bölmektir. Yeni satır karakteri hakkında !
Damien Flament

1

Benim için hiçbir şey işe yaramıyordu.

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);

Benim için çalışıyor:

$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";

0

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

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.