2012-08-07 20 views
5

Tôi có một CSV Tôi tải từ một nguồn Tôi không phải là kiểm soát và cuối mỗi dòng là một nhân vậtPHP Loại bỏ của Windows^M nhân vật

^M 

khi in với một thiết bị đầu cuối bash. Làm thế nào tôi có thể khử trùng đầu vào này theo lập trình trong PHP?

Trả lời

15

Những gì bạn thấy là ký tự điều khiển Windows. Để loại bỏ điều này trong PHP, những gì bạn cần làm là $file = str_ireplace("\x0D", "", $file) điều này sẽ hoạt động cho dù hệ thập lục phân là chữ thường hoặc chữ hoa.

+0

Bingo - đã thực hiện thủ thuật – nsfyn55

3

^M là một carriage return, bạn sẽ có thể để loại bỏ nó với:

$string = str_replace("\r", "", $string); 
1

Bạn cũng có thể yêu cầu PHP để tự động phát hiện bất kỳ kết thúc dòng lạ bởi chỉ cần thêm vào dòng này trước khi đọc các tập tin CSV và bạn sẽ không được yêu cầu làm bất cứ điều gì khác.

ini_set('auto_detect_line_endings', true); 
+0

Cách tiếp cận hợp lệ, nhưng không có tác dụng đối với tôi, điều này hơi lạ. Tôi đã thay thế win bằng các ký tự linux: preg_replace ('~ \ r \ n? ~', "\ N", $ string); –

+0

Ok, tôi nghĩ có thể bạn có một hệ điều hành khác để khai thác. Tôi đang sử dụng Mac, vì vậy nó có thể không hoạt động trên tất cả các hệ điều hành. Thật kỳ lạ như bạn đã nói. – ksoni