ใน PHP Single-quoted string ('...') ไม่ Parse Escape Sequence เช่น \n, \t ต้องใช้วิธีอื่น
วิธีที่ 1: ใช้ Double Quotes (ง่ายที่สุด)
echo "Line 1\nLine 2\nLine 3"; // ทำงานได้ปกติ
วิธีที่ 2: Concatenation กับ Double-quoted Newline
$str = 'Line 1' . "\n" . 'Line 2' . "\n" . 'Line 3';
echo $str;
วิธีที่ 3: ใช้ Constant PHP_EOL (Cross-platform)
// PHP_EOL = \n (Linux/Mac), \r\n (Windows)
echo 'Line 1' . PHP_EOL . 'Line 2' . PHP_EOL . 'Line 3';
// เหมาะสำหรับ CLI Script และ Log File
วิธีที่ 4: ใช้ Heredoc / Nowdoc (หลายบรรทัด)
// Heredoc - Parse Variable (เหมือน Double Quotes)
$name = 'World';
echo <<
กรณี CLI vs Web Browser
function getNewline() {
// CLI: ใช้ PHP_EOL
// Web: ใช้
หรือ \n (ใน HTML Source)
return (PHP_SAPI === 'cli') ? PHP_EOL : '
';
}
echo 'Line 1' . getNewline() . 'Line 2';
ตัวอย่างจากคำถามเดิม (แก้ไขแล้ว)
จริง newline
$var3 = 'hello';
echo $var1 . $var2 . $var3; // hi (newline) hello
echo PHP_EOL; // Newline ตาม Platform
// str_replace ไม่ต้องใช้กับ \n ใน Double quotes แล้ว
// $var2 = str_replace("\n", '\n', $var2); // ผิด: ทำให้กลายเป็น literal \n
echo $var1 . $var2 . $var3; // hi (newline) hello
echo PHP_EOL;?>
สรุป: เลือกใช้ตัวไหน?
| สถานการณ์ | แนะนำ |
|---|---|
| String ธรรมดา ต้องการ Newline | Double quotes "\n" |
| CLI Script / Log File | PHP_EOL |
| HTML Output | <br> หรือ CSS white-space: pre-line |
| String หลายบรรทัด มี Variable | Heredoc <<<EOT |
| String หลายบรรทัด ไม่มี Variable | Nowdoc <<<'EOT' |