PHP'de yeni bir satıra geçmek için çift tırnak içerisinde
\n ifadesini kullanabilirsiniz: echo "Satır 1\nSatır 2";. Bir diğer yöntem ise PHP_EOL sabitinden faydalanmaktır; bu kullanım satır bitimlerinde kodun okunabilirliğini artırır: echo 'İşlem tamam' . PHP_EOL;. Unutulmamalıdır ki, bir web sayfasında bu ifadeler doğrudan bir alt satıra geçiş sağlamaz; bunun için HTML tarafında <br> etiketi veya nl2br() fonksiyonu gereklidir.
PHP:
<?php
echo "Line 1\nLine 2\n";
echo 'Done' . PHP_EOL;
echo "Name:\tAda\n"; // \t is a tab
echo "Language:\tPHP\n";
Tek Tırnak ve Çift Tırnak Arasındaki Fark
\n (alt satır) ve \t (tab) gibi özel kaçış dizileri sadece çift tırnak kullanıldığında anlam kazanır. Tek tırnak tercih edildiğinde '\n' ifadesi, biri ters eğik çizgi diğeri "n" harfi olmak üzere iki ayrı karakter olarak algılanır. Genellikle "\n neden çalışmıyor?" sorusunun temel sebebi bu tırnak farkıdır.
PHP:
<?php
echo 'Single: one\ntwo', "\n";
echo "Double: one\ntwo", "\n";
echo strlen('\n'), "\n"; // 2 characters
echo strlen("\n"), "\n"; // 1 character
// Joining single-quoted text with a newline
echo 'one' . "\n" . 'two' . PHP_EOL;
Çift tırnakla kullanılabilen tüm kaçış dizilerinin detaylı listesine dizgeler bölümünden ulaşabilirsiniz.
PHP_EOL Sabiti ile "\n" Arasındaki Kıyaslama
PHP_EOL sabiti, PHP'nin üzerinde çalıştığı işletim sistemine uygun satır sonu karakterini temsil eder: Windows sistemlerde "\r\n", Linux ve macOS tabanlı sistemlerde ise "\n" çıktısını verir. Terminal ekranına çıktı verirken veya sunucu üzerindeki dosyaları işlerken bu sabiti kullanmak mantıklıdır. Ancak özel bir protokol veya biçim kullanılıyorsa ona sadık kalınmalıdır: Örneğin e-postalar ve HTTP başlıkları mutlaka "\r\n" gerektirir; buna karşın pek çok modern yazılım her iki formatı da sorunsuz yorumlayabilir.
PHP:
<?php
var_dump(PHP_EOL);
var_dump(PHP_EOL === "\n");
$lines = ['apples', 'pears', 'plums'];
file_put_contents('list.txt', implode(PHP_EOL, $lines) . PHP_EOL);
echo file_get_contents('list.txt');
echo "Lines in file: ", count(file('list.txt')), "\n";
Teknik olarak
"\r" imleci satır başına döndürür (carriage return), "\n" ise yeni bir satır açar (line feed). Windows ortamında dosyalar bu iki karakterin birleşimi olan "\r\n" ile sonlandırılır. Bir Windows kullanıcısının gönderdiği metinlerde veya formlardaki <textarea> alanlarından gelen verilerde beklenmedik \r karakterlerine rastlanmasının sebebi budur.HTML Sayfalarında Yeni Satır: br ve nl2br
Web tarayıcıları, kod içerisindeki alt satır karakterlerini tek bir boşluk gibi yorumlar. Bu nedenle
echo "a\nb" kodu tarayıcıda yan yana a b şeklinde görünür. Çözüm olarak ya doğrudan <br> etiketi yazdırmalı ya da metindeki satır sonlarını otomatik olarak <br /> etiketine dönüştüren nl2br() fonksiyonunu kullanmalısınız. Kodu çalıştırdığınızda çıktı ile sayfa görüntüsü arasındaki farkı gözlemleyebilirsiniz:
PHP:
<?php
$address = "221B Baker Street\nLondon\nNW1 6XE";
echo "<p><strong>Raw newlines:</strong> ", $address, "</p>\n";
echo "<p><strong>With nl2br:</strong><br>", nl2br($address), "</p>\n";
echo "<p><strong>With pre:</strong></p><pre>", $address, "</pre>\n";
Kodu çalıştırdığınızda her üç yöntemin de çıktı ekranında benzer sonuçlar verdiğini göreceksiniz. Ancak sayfa görünümünde ilk örnek tek satıra düşerken,
nl2br() metni düzgünce böler; <pre> etiketi ise metni yazıldığı haliyle muhafaza eder.Textarea Verilerini Satır Sonlarıyla Birlikte Görüntüleme
Bir
<textarea> kutusuna girilen metinler, kullanıcının bıraktığı satır boşluklarını korur. Fakat bu metni HTML içerisinde güvenle göstermek için önce güvenlik işlemlerinden geçirmek şarttır. Burada işlem sırası kritik önem taşır: Önce htmlspecialchars() ile zararlı kodları etkisiz hale getirmeli, ardından nl2br() ile satırları bölmelisiniz. Aksi takdirde, dönüştürülen <br /> etiketleri de güvenlik filtresine takılarak metin olarak görünür. Kodu çalıştırıp bir metin girerek sonucu önizleme kısmından kontrol edebilirsiniz.
PHP:
<?php
$note = $_POST['note'] ?? '';
?>
<form method="post">
<textarea name="note" rows="4" cols="30"><?= htmlspecialchars($note) ?></textarea><br>
<button>Preview</button>
</form>
<?php if ($note !== ''): ?>
<h3>Preview</h3>
<p><?= nl2br(htmlspecialchars($note)) ?></p>
<p><?= substr_count($note, "\n") + 1 ?> lines</p>
<?php endif; ?>
Formlardaki metin alanlarından gelen satır sonları
"\r\n" veya sadece "\n" şeklinde olabilir. Her iki formatta da "\n" karakteri ortak olduğu için bu karakter üzerinden işlem yapmak sağlıklı sonuç verir. Bu noktada htmlspecialchars() kullanımı, veri güvenliği açısından zorunludur.Metni Satır Sonlarına Göre Parçalara Ayırma
Kendi oluşturduğunuz standart metinlerde
explode("\n", $text) komutu işinizi görecektir. Ancak dışarıdan gelen veya farklı sistemlerde oluşturulmuş dosyalarda satır sonları değişkenlik ("\r\n", "\n" veya "\r") gösterebilir. Bu tür durumlarda, tüm satır sonu varyasyonlarını tanıyan \R ifadesiyle preg_split('/\R/', $text) fonksiyonunu kullanmak en kesin çözümdür.
PHP:
<?php
$text = "first\r\nsecond\nthird\rfourth";
$lines = preg_split('/\R/', $text);
print_r($lines);
// explode leaves \r at the end of "first"
$naive = explode("\n", $text);
var_dump($naive[0]);
// Skip empty lines too
$text2 = "a\n\nb\n\n\nc\n";
print_r(preg_split('/\R/', $text2, -1, PREG_SPLIT_NO_EMPTY));
Bir Metindeki Satır Sonlarını Temizleme
Çok satırlı bir veriyi tek bir satıra indirmek istiyorsanız tüm satır sonu karakterlerini değiştirmeniz gerekir. Bu işlemde
"\r\n" ifadesini, tekli karakterlerden (\n veya \r) daha önce işleme almalısınız; aksi halde Windows uyumlu satır sonlarında gereksiz çift boşluk oluşabilir:
PHP:
<?php
$text = "Hello\r\nworld\nfrom\rPHP\n";
$oneLine = str_replace(["\r\n", "\r", "\n"], ' ', $text);
var_dump($oneLine);
$regex = preg_replace('/\R/', ' ', $text);
var_dump(trim($regex));
// Only the newline at the end
var_dump(rtrim("last line\n", "\r\n"));
Unutulmamalıdır ki
trim() ve rtrim() fonksiyonları metnin sadece başındaki ve sonundaki boşlukları/satır sonlarını temizler. Metnin içindeki satır sonlarına müdahale etmezler; bu yüzden satırları birleştirmek amacıyla değil, sadece uçlardaki fazlalıkları atmak için kullanılmalıdırlar.Şu an konuyu görüntüleyenler (Toplam : 0, Üye: 0, Misafir: 0)
Benzer konular
- Cevaplar
- 5
- Görüntüleme
- 16
- Cevaplar
- 2
- Görüntüleme
- 11
- Cevaplar
- 2
- Görüntüleme
- 12
- Cevaplar
- 4
- Görüntüleme
- 11
- Cevaplar
- 2
- Görüntüleme
- 14
