Menu

ירידת שורה ב-PHP: \n, PHP_EOL ו-nl2br

כדי להדפיס שורה חדשה ב-PHP, כתבו "\n" בתוך מירכאות כפולות או השתמשו ב-PHP_EOL. בדף אינטרנט ירידת שורה לא נראית, אז השתמשו ב-<br> או ב-nl2br(). למדו את ההבדל, למה '\n' בגרשיים בודדים לא עובד, ואיך מפצלים או מסירים ירידות שורה.

בדף הזה יש עורכים שאפשר להריץ - לערוך, להריץ ולראות את הפלט מיד.

כתבו \n בתוך מחרוזת במירכאות כפולות כדי להדפיס שורה חדשה: echo "Line 1\nLine 2";. הקבוע PHP_EOL עושה את אותו הדבר ונקרא ברור יותר בסוף שורה: echo 'Done' . PHP_EOL;. בדף אינטרנט, ירידת שורה לא מופיעה כשבירת שורה; שם צריך <br> או nl2br().

גרשיים בודדים מול מירכאות כפולות

רצפי escape כמו \n ו-\t עובדים רק במירכאות כפולות. בגרשיים בודדים, '\n' הוא שני תווים: לוכסן הפוך והאות n. זו הסיבה הרגילה ל"\n לא עובד".

העמוד מחרוזות מפרט כל רצף escape שמירכאות כפולות מבינות.

PHP_EOL מול "\n"

PHP_EOL הוא סוף השורה של המערכת ש-PHP רצה עליה: "\n" ב-Linux וב-macOS, "\r\n" ב-Windows. השתמשו בו לפלט בטרמינל ולקבצים שתקראו על אותה מכונה. כשפורמט מגדיר סוף שורה משלו, השתמשו בו במקום: כותרות HTTP ואימייל צריכים "\r\n", ורוב הכלים קוראים "\n" בלי בעיה בכל מקום.

"\r" הוא החזרת גררה, "\n" הוא הזנת שורה. קובצי Windows מסיימים שורות בשניהם, "\r\n", ולכן טקסט ממשתמש Windows או מ-<textarea> מכיל לעיתים קרובות תווי \r שלא ציפיתם להם.

שורה חדשה ב-HTML: br ו-nl2br

דפדפן מכווץ ירידות שורה לרווח אחד, ולכן echo "a\nb" מציג a b בדף. או שתדפיסו <br> בעצמכם, או שתשאירו את ירידות השורה בטקסט ותמירו אותן עם nl2br(), שמכניסה <br /> לפני כל אחת. הריצו את זה והשוו בין הלשוניות Output ו-Page:

בלשונית Output שלושתם נראים דומים. בלשונית Page הראשון נדחס לשורה אחת, nl2br() שוברת אותו, ו-<pre> שומר על ירידות השורה כפי שנכתבו.

הצגת קלט מ-textarea עם ירידות השורה שלו

טקסט מ-<textarea> שומר על השורות שהמשתמש הקליד, אבל חייבים לבצע לו escape לפני שמדפיסים אותו לתוך HTML. הסדר חשוב: קודם htmlspecialchars(), ואז nl2br(), אחרת תגיות ה-<br /> עצמן היו עוברות escape. הריצו את זה, הקלידו כמה שורות בתיבה ולחצו על Preview: אותו סקריפט ירוץ שוב כש-$_POST מלא.

ירידת שורה ב-textarea יכולה להגיע כ-"\r\n" או כ-"\n"; שתיהן מכילות "\n", ולכן ספירת התו הזה עובדת בשני המקרים. htmlspecialchars() מסבירה למה escape אינו אופציונלי כאן.

פיצול מחרוזת לפי ירידת שורה

explode("\n", $text) עובדת לטקסט שיצרתם בעצמכם. בטקסט ממשתמשים או מקבצים, סופי השורה יכולים להיות "\r\n", "\n" או "\r"; preg_split('/\R/', $text) מטפלת בכולם, כי \R מתאים לכל ירידת שורה.

הסרת ירידות שורה ממחרוזת

כדי להפוך טקסט של כמה שורות לשורה אחת, החליפו כל סוג של סוף שורה. החליפו את "\r\n" לפני התווים הבודדים, אחרת כל ירידת שורה של Windows הייתה הופכת לשני רווחים:

trim() ו-rtrim() מסירות ירידות שורה בקצוות של מחרוזת אבל אף פעם לא באמצע, ולכן הן הכלי הנכון לשורה שנקראה מקובץ והכלי הלא נכון לחיבור שורות.

שאלות נפוצות

איך מדפיסים שורה חדשה עם echo ב-PHP?

שימו \n בתוך מחרוזת במירכאות כפולות: echo "Line 1\nLine 2";. או הוסיפו את הקבוע: echo 'Line 1' . PHP_EOL;. בדפדפן, ירידת שורה לא מוצגת; השתמשו שם ב-<br> או ב-nl2br().

למה \n לא עובד ב-PHP?

או שהמחרוזת בגרשיים בודדים, שבהם '\n' הוא לוכסן הפוך ו-n, או שהפלט מוצג כ-HTML, שבו הדפדפן מתייחס לירידת שורה כמו לרווח. השתמשו ב-"\n" במירכאות כפולות לפלט טקסט וב-nl2br() או ב-<br> לדפי אינטרנט.

מה זה PHP_EOL?

קבוע שמחזיק את סוף השורה של מערכת ההפעלה ש-PHP רצה עליה: "\n" ב-Linux וב-macOS, "\r\n" ב-Windows. השתמשו בו לפלט שמיועד לטרמינל או לקבצים מקומיים; ב-HTTP, באימיילים ובקובצי CSV הפורמט קובע בדרך כלל את סוף השורה בלי קשר למערכת ההפעלה.

מה nl2br עושה ב-PHP?

nl2br($text) מכניסה <br /> לפני כל ירידת שורה במחרוזת, כך שטקסט שהוקלד ב-<textarea> שומר על השורות שלו כשהוא מוצג ב-HTML. בצעו escape קודם: nl2br(htmlspecialchars($text)).

איך מסירים ירידות שורה ממחרוזת ב-PHP?

החליפו את שלושת סוגי סוף השורה: str_replace(["\r\n", "\r", "\n"], ' ', $text), או עם ביטוי רגולרי, preg_replace('/\R/', ' ', $text). כדי להסיר רק את ירידת השורה בסוף, השתמשו ב-rtrim($text, "\r\n").

איור של שפות התכנות ב-Coddy

ללמוד תכנות עם Coddy

להתחיל