اكتب \n داخل نص بين علامتي تنصيص مزدوجتين لطباعة سطر جديد: echo "Line 1\nLine 2";. ويفعل الثابت PHP_EOL الشيء نفسه ويُقرأ بوضوح أكبر في نهاية السطر: echo 'Done' . PHP_EOL;. في صفحة الويب، لا يظهر السطر الجديد فاصلَ سطر؛ هناك تحتاج إلى <br> أو nl2br().
علامتا التنصيص المفردتان مقابل المزدوجتين
تسلسلات الهروب مثل \n و\t لا تعمل إلا داخل علامتي التنصيص المزدوجتين. داخل المفردتين، تكون '\n' محرفين: شرطة مائلة عكسية والحرف n. وهذا السبب المعتاد لعبارة «\n لا يعمل».
تسرد صفحة النصوص كل تسلسلات الهروب التي تفهمها علامتا التنصيص المزدوجتان.
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> بالأسطر التي كتبها المستخدم، لكن يجب أن تهرّبه قبل طباعته في HTML. والترتيب مهم: htmlspecialchars() أولًا، ثم nl2br()، وإلا هُرّبت وسوم <br /> نفسها. شغّله، واكتب بضعة أسطر في المربع واضغط Preview: يعمل السكربت نفسه مرة أخرى مع امتلاء $_POST.
قد يصل فاصل السطر في textarea على شكل "\r\n" أو "\n"؛ وكلاهما يحتوي "\n"، لذا يعمل عدّ ذلك المحرف في الحالتين. وتشرح htmlspecialchars() لماذا لا يكون التهريب اختياريًا هنا.
تقسيم نص عند السطر الجديد
تعمل 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. هرّب أولًا: nl2br(htmlspecialchars($text)).
كيف أحذف فواصل الأسطر من نص في PHP؟
استبدل الأنواع الثلاثة من نهايات الأسطر: str_replace(["\r\n", "\r", "\n"], ' ', $text)، أو بتعبير نمطي، preg_replace('/\R/', ' ', $text). ولحذف السطر الجديد الختامي فقط، استخدم rtrim($text, "\r\n").