2013-07-23 8 views
87

mam taką linię, jak to w moim CSV:Prawidłowo uciec podwójny cudzysłów w pliku CSV

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

Cytat obok 24 służy do wyrażania cali, natomiast cytat tuż obok tej cytatem zamyka pole . Czytam wiersz z fgetcsv ale parser popełni błąd i odczytuje wartość jako:

Samsung U600 24",10000003409"

próbowałem umieszczenie backslash przed cytatem cali, ale potem po prostu odwrotny ukośnik w nazwie:

Samsung U600 24\"

Czy istnieje sposób, aby prawidłowo uciec to w pliku CSV, tak że wartość byłaby Samsung U600 24", czy mam regex go w procesorze?

+15

Po prostu podwaj swoją ofertę. To wszystko –

Odpowiedz

157

Zastosowanie 2 cytaty:

"Samsung U600 24""" 
+47

RFC-4180, akapit "Jeżeli podwójne cudzysłowy są używane do zamykania pól, to podwójny cudzysłunek pojawiający się w polu musi być poprzedzony cudzysłowem." – tommed

+1

Jak już powiedziałeś, potrzebujesz tylko podwójnego cudzysłowu, aby uniknąć podwójnego cudzysłowu. Za pomocą narzędzia wiersza polecenia o nazwie csvfix można wykryć dowolne wiersze, które nie są zgodne: csvfix zaznacz -nl -v [nazwa pliku] –

+1

@SamCritchley Widzę tu tylko jeden podwójny cudzysłów. Przez "Użyj 2 cytatów", użytkownik4035 oznacza, że ​​1 cytat powinien zostać zastąpiony przez 2 cytaty. Unikając podwójnych cudzysłowów z podwójnymi cudzysłowami, skutecznie tworzysz pary podwójnych cudzysłowów (2 podwójne cudzysłowy). Ostatnim cytatem, który widzisz na końcu, jest zakończenie pola. – Zenexer

18

Nie tylko cudzysłowy, będziesz w potrzebie pojedynczy cudzysłów ('), podwójny cudzysłów ("), backslash (\) i NUL (bajt NULL).

Użyj fputcsv() do napisania, a fgetcsv() do przeczytania, co zajmie się wszystkimi.

+3

[Ten komentarz] (http://php.net/manual/en/function.fputcsv.php #104980) na [stronie dokumentacji 'fputcsv()'] (http://php.net/manual/en /function.fputcsv.php) pokazuje, jak można użyć 'fputcsv()', gdy chcesz wyprowadzać w formacie csv do przeglądarki zamiast rzeczywistego pliku. – dennisschagt

+9

@Angelin Nadar, czy mógłbyś dodać źródło do twojego wniosku o potrzebie podwójnego pojedynczego cudzysłowu, odwrotnego ukośnika i NUL? Nie znalazłem go w [RFC-4180] (https://tools.ietf.org/html/rfc4180). –

+0

Nie trzeba w rzeczywistości uciekać od pojedynczych cudzysłowów itp. Prawidłowy plik CSV nawet nie musi dodawać podwójnych cudzysłowów wokół pola zawierającego tylko pojedyncze cudzysłowy. Jeśli czytnik CSV jest prawidłowo zaimplementowany, powinien poprawnie odczytać plik nawet z tymi symbolami. –

Powiązane problemy