2013-07-23 43 views
87

Tôi có một dòng như thế này trong CSV của tôi:đúng thoát khỏi một dấu nháy kép trong CSV

"Samsung U600 24"","10000003409","1","10000003427"

Trích bên cạnh 24 được sử dụng để bày tỏ inch, trong khi báo giá ngay cạnh câu rằng đóng cửa lĩnh vực này . Tôi đang đọc dòng với fgetcsv nhưng phân tích cú pháp làm cho một sai lầm và đọc giá trị như:

Samsung U600 24",10000003409"

Tôi đã thử đặt một dấu chéo ngược trước khi inches báo giá, nhưng sau đó tôi chỉ nhận được một dấu chéo ngược trong tên:

Samsung U600 24\"

có cách nào để thoát đúng cách này trong CSV, do đó giá trị sẽ là Samsung U600 24", hoặc tôi phải regex nó trong bộ vi xử lý?

+15

Chỉ cần tăng gấp đôi báo giá của bạn. Đó là tất cả –

Trả lời

157

Sử dụng 2 dấu ngoặc kép:

"Samsung U600 24""" 
+47

RFC-4180, đoạn "Nếu dấu ngoặc kép được sử dụng để bao bọc các trường, thì một dấu ngoặc kép xuất hiện bên trong một trường phải được thoát bằng cách đặt trước dấu ngoặc kép đó." – tommed

+1

Như đã nói, bạn chỉ cần thêm một dấu nháy đơn để thoát khỏi dấu ngoặc kép. Bạn có thể sử dụng công cụ dòng lệnh gọi là csvfix để phát hiện bất kỳ dòng nào không tuân thủ: csvfix check -nl -v [tên tệp] –

+1

@SamCritchley Tôi chỉ thấy một dấu nháy đơn được sử dụng để thoát khỏi đây. Bằng "Sử dụng 2 dấu ngoặc kép", user4035 có nghĩa là 1 trích dẫn phải được thay thế bằng 2 dấu ngoặc kép. Bằng cách thoát khỏi dấu ngoặc kép với dấu ngoặc kép, bạn đang tạo cặp ngoặc kép có hiệu quả (2 dấu ngoặc kép). Trích dẫn cuối cùng bạn thấy ở cuối là chấm dứt trường. – Zenexer

18

Không chỉ dấu ngoặc kép, bạn sẽ cần cho dấu nháy đơn ('), dấu ngoặc kép ("), dấu chéo ngược (\) và NUL (NULL byte).

Sử dụng fputcsv() để viết và fgetcsv() để đọc, sẽ xử lý tất cả.

+3

[Nhận xét này] (http://php.net/manual/en/function.fputcsv.php#104980) trên [trang tài liệu của 'fputcsv()'] (http://php.net/manual/en /function.fputcsv.php) cho thấy cách bạn có thể sử dụng 'fputcsv()' khi bạn muốn xuất ra định dạng csv cho trình duyệt thay vì tệp thực. – dennisschagt

+9

@Angelin Nadar, bạn có thể vui lòng thêm nguồn vào yêu cầu của bạn về nhu cầu tăng gấp đôi dấu ngoặc đơn, dấu gạch chéo ngược và NUL không? Tôi không tìm thấy nó trong [RFC-4180] (https://tools.ietf.org/html/rfc4180). –

+0

Bạn không cần phải thực sự thoát khỏi dấu nháy đơn vv Một tệp CSV thích hợp thậm chí không cần phải thêm dấu ngoặc kép xung quanh một trường chỉ chứa dấu nháy đơn. Nếu trình đọc CSV được triển khai chính xác, trình đọc CSV phải đọc chính xác ngay cả với các biểu tượng đó. –