Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> PHP

ลบ Newline ออกจาก String ใน PHP

หลายวิธีในการลบ Newline (\n, \r, \r\n) ออกจาก String

วิธีที่ 1: preg_replace() - ครอบคลุมทุกรูปแบบ (แนะนำ)

$str = "Line 1\nLine 2\r\nLine 3\rLine 4";

// ลบ Newline ทั้งหมด (\n, \r, \r\n)
$result = preg_replace('/\r\n|\r|\n/', '', $str);
// "Line 1Line 2Line 3Line 4"

// หรือแบบสั้น (Regex: \R = any Unicode newline sequence - PHP 7.4+)
$result = preg_replace('/\R/', '', $str);

วิธีที่ 2: str_replace() - เร็วกว่า สำหรับ ASCII

$str = "Line 1\nLine 2\r\nLine 3";

// แทนที่ \n และ \r ด้วย String ว่าง
$result = str_replace(["\n", "\r"], '', $str);
// "Line 1Line 2Line 3"

// ⚠️ \r\n จะกลายเป็น \n แล้วถูกลบอีกครั้ง -> ผลลัพธ์ถูกต้อง แต่ทำงาน 2 รอบ

วิธีที่ 3: strtr() - เร็วที่สุดสำหรับ Character Mapping

$str = "Line 1\nLine 2\rLine 3";

// strtr กับ Array Mapping
$result = strtr($str, ["\n" => '', "\r" => '']);
// "Line 1Line 2Line 3"

// strtr กับ String (3 Arguments) - ไม่รองรับ Multi-char
$result = strtr($str, "\n\r", ''); // ❌ ผิด: แมป n->'', \r->'' แยกกัน

วิธีที่ 4: nl2br() + Strip Tags (ถ้าต้องการ
แทน)

$str = "Line 1\nLine 2";

// แปลง Newline เป็น 
$html = nl2br($str); // "Line 1
\nLine 2" // แล้ว Strip Tags ถ้าต้องการ Plain Text $plain = strip_tags($html); // "Line 1\nLine 2" (กลับมาอีกครั้ง!)

กรณีเฉพาะ: Windows (\r\n) vs Unix (\n) vs Old Mac (\r)

function normalizeNewlines(string $str): string {
    // แปลงทุกอย่างเป็น \n ก่อน
    $str = str_replace("\r\n", "\n", $str); // Windows -> Unix
    $str = str_replace("\r", "\n", $str);   // Old Mac -> Unix
    return $str;
}

function removeAllNewlines(string $str): string {
    return str_replace("\n", '', normalizeNewlines($str));
}

Benchmark (1MB String, 50% Newlines)

/* ประมาณ:
str_replace(["\n","\r"], ''):  0.008s
strtr($str, ["\n"=>'',"\r"=>'']): 0.006s  <-- เร็วที่สุด
preg_replace('/\R/', ''):       0.025s (Regex Overhead)
preg_replace('/\r\n|\r|\n/'):   0.022s
*/
// strtr เร็วที่สุดสำหรับ Character Replacement

สรุป

ความต้องการแนะนำ
ลบ Newline ทั้งหมด (เร็วที่สุด)strtr($str, ["\n" => '', "\r" => ''])
ลบ Newline ทั้งหมด (Unicode Safe)preg_replace('/\R/u', '', $str)
Normalize Newlines (\r\n, \r → \n)str_replace(["\r\n", "\r"], "\n", $str)
Newline → <br> (HTML)nl2br($str)