السلام عليكم ورحمة الله وبركاته
ظهرت لي مشكلة بسيطة أحببت مشاركتها هنا ..
لنفترض أننا نقوم بكتابة برنامج يطبع عبارة :
Hello World!Hello World!أي أن الطباعة في سطرين مختلفين .. ونريد أن يكون الخرج في ملف خارجي ..
هذا كود بسيط جداً (يُفترض أنه يقوم بالمطلوب )
$file_name="36a2.txt";//اسم الملف $file_handle=fopen($file_name,'w');//فتح الملف للكتابة //w = write $content="Hello World!\nHello World!";//النص المطلوب طباعته echo "<pre>".$content."</pre>";//طباعة النص كما هو الى المتصفح fwrite($file_handle,$content);//طباعة النص الى الملف fclose($file_handle);//إغلاق الملفوالآن إليكم السؤال :
على المتصفح تتم طباعة النص كما هو مطلوب .. في سطرين ..
لكن عند فتحه باستخدام محرر ويندوز notepad نجده على سطر واحد ..(باقي المحررات تعتبره سطرين )
يمكنك التفكير في السبب قبل قراءة الجواب أدناه :)
الجواب :
لاحظ أننا استخدمنا \n لطباعة السطر الجديد ..
يّسمّى الرمز \n والذي له القيمة 10 في جدول ASCII بـLine Feed أي تلقيم السطر ..
أما الرمز الآخر \r ذو القيمة 13 في جدول ASCII فيسمّى Carriage Return أي إعادة النقل
يقوم الرمز \r تاريخيّا بإعادة المؤشر إلى بداية السطر..
أما الرمز \n فيقوم بإنزالنا سطرا للأسفل ..
(السبب التاريخي يرجع إلى تقليد حركة الآلة الكاتبة حيث تنزل سطرا ثم ترجع المؤشر )
المهم .. في محرر notepad يسنتظر ورود \r\n حتى ينزل لسطر جديد ..
أما في المحررات الجديدة .. فلا تهتم سواء كان \r أو \n أو \r\n أو \n\r فستفهم أن عليها النزول لسطر جديد ..
لذلك عليك الحذر عندما تكتب برنامجاً يقرأ حرفا حرفا .. فقد تكون نهاية السطر أحد الرموز الأربع السابقة ..
(بالمناسبة .. إذا كنت تستخدم notepad++ يمكنك اختبار view->show symbols->show all charachters وسترى كل الرموز الغريبة )
بالتوفيق :)