1. Giới thiệu về lỗi
Khi bạn viết code, đặc biệt là sử dụng PHP và các coding standard như PSR-12, bạn có thể gặp phải thông báo lỗi như sau:
End of line character is invalid; expected "\n" but found "\r\n" source="Generic.Files.LineEndings.InvalidEOLChar"Thông báo này có nghĩa rằng file code của bạn sử dụng ký tự xuống dòng sai chuẩn. Hầu hết các coding standard đều yêu cầu ký tự xuống dòng là LF (\n) nhưng bạn lại đang sử dụng ký tự CRLF (\r\n).
2. Sự khác biệt giữa CRLF và LF
- LF (
\n): Line Feed - ký tự xuống dòng được dùng phổ biến trong Linux, Unix và macOS. - CRLF (
\r\n): Carriage Return + Line Feed - ký tự xuống dòng được sử dụng trong Windows.
Do sự khác biệt này, file code có thể gây ra lỗi khi chạy trên các hệ thống hoặc chuẩn coding yêu cầu chỉ dùng LF.
3. Vì sao bạn gặp lỗi này?
Lỗi này thường xuất hiện khi:
- Bạn tạo hoặc chỉnh sửa file code trên hệ điều hành Windows, và trình chỉnh sửa mặc định thêm ký tự xuống dòng CRLF (
\r\n). - Project của bạn tuân thủ một coding standard nghiêm ngặt như PSR-12, yêu cầu mọi file phải dùng LF (
\n).
4. Cách khắc phục lỗi nhanh chóng
Bạn có thể dễ dàng sửa lỗi này bằng cách thay đổi cài đặt Line Ending trong trình chỉnh sửa mã nguồn của bạn.
Đối với VSCode
- Mở file bị lỗi trong VSCode.
- Ở góc dưới bên phải màn hình, bạn sẽ thấy biểu tượng
CRLF. - Nhấp vào đó và chọn
LF. - Lưu lại file.
Đối với Sublime Text
- Mở file code trong Sublime Text.
- Trên thanh menu, chọn
View → Line Endings → Unix (LF). - Lưu lại file.
Đối với PHPStorm
- Mở file code trong PHPStorm.
- Chọn
File → Line Separators → LF - Unix and macOS. - Lưu lại file.
Chuyển đổi bằng Command Line
Nếu bạn quen thuộc với command line (terminal), có thể dùng công cụ dos2unix:
dos2unix file.php5. Cách phòng tránh lỗi này trong tương lai
Cách tốt nhất để tránh lỗi này là cấu hình dự án của bạn để đảm bảo tất cả các file luôn sử dụng LF. Dưới đây là cách thực hiện với .editorconfig:
Tạo file .editorconfig ở thư mục gốc của dự án với nội dung:
[*]
end_of_line = lfCác trình chỉnh sửa hiện đại như VSCode, Sublime Text, PHPStorm sẽ tự động làm theo cấu hình này mỗi lần lưu file.
6. Tổng kết
Lỗi "End of line character is invalid; expected '\n' but found '\r\n'" không nghiêm trọng nhưng có thể làm gián đoạn workflow của bạn hoặc khiến code review bị từ chối. Việc thiết lập đúng chuẩn từ đầu giúp bạn tiết kiệm thời gian và tránh những lỗi phát sinh sau này.
Hy vọng bài viết đã giúp bạn hiểu rõ hơn và nhanh chóng xử lý lỗi này!








