2013-07-23 13 views
87

Ich habe eine Zeile wie diese in meinem CSV:richtig ein doppeltes Anführungszeichen in CSV entkommen

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

Zitat neben 24 verwendet wird Zoll zum Ausdruck bringen, während das Angebot nur neben dieses Zitat das Feld schließt . Ich lese die Zeile mit fgetcsv aber der Parser einen Fehler macht und liest den Wert als:

Samsung U600 24",10000003409"

ich vor dem Zoll Zitat ein Backslash versucht setzen, aber dann bekomme ich nur einen Schrägstrich im Namen:

Samsung U600 24\"

gibt es eine Möglichkeit, um richtig diese Flucht in der CSV, so dass der Wert Samsung U600 24" sein würde, oder habe ich es in dem Prozessor regex?

+15

Verdoppeln Sie einfach Ihr Angebot. Das ist alles –

Antwort

157

Verwendung 2 Zitate:

"Samsung U600 24""" 
+47

RFC-4180, Absatz "Wenn doppelte Anführungszeichen zum Umschließen von Feldern verwendet werden, muss ein Doppelzitat, das innerhalb eines Felds erscheint, mit einem anderen doppelten Anführungszeichen versehen werden." – tommed

+1

Wie gesagt, Sie müssen nur ein einziges Doppelzitat hinzufügen, um ein Doppelzitat zu vermeiden. Sie können ein Befehlszeilenprogramm mit dem Namen csvfix verwenden, um Zeilen zu erkennen, die nicht konform sind: csvfix check -nl -v [Dateiname] –

+1

@SamCritchley Ich sehe nur ein einziges Doppelzitat, um hier zu entkommen. Mit "2 Anführungszeichen verwenden" bedeutet Benutzer4035, dass 1 Zitat durch 2 Anführungszeichen ersetzt werden soll. Indem Sie doppelte Anführungszeichen mit doppelten Anführungszeichen umgehen, erstellen Sie effektiv doppelte Anführungszeichen (2 doppelte Anführungszeichen). Das letzte Zitat, das Sie am Ende sehen, besteht darin, das Feld zu beenden. – Zenexer

18

nicht nur doppelte Anführungszeichen, werden Sie brauchen für Apostroph ('), doppelte Anführungszeichen ("), Backslash (\) und NUL (der NULL-Byte) sein.

Verwenden Sie fputcsv() zu schreiben, und fgetcsv() zu lesen, die sich um alle kümmern wird.

+3

[Dieser Kommentar] (http://php.net/manual/en/function.fputcsv.php#104980) auf [der Dokumentationsseite von 'fputcsv()'] (http://php.net/manual/en /function.fputcsv.php) zeigt, wie Sie 'fputcsv()' verwenden können, wenn Sie anstelle einer tatsächlichen Datei im CSV-Format an den Browser ausgeben möchten. – dennisschagt

+9

@Angelin Nadar, könnten Sie bitte eine Quelle zu Ihrer Behauptung über die Notwendigkeit, doppelte Anführungszeichen, Backslash und NUL zu verdoppeln? Ich habe es in [RFC-4180] (https://tools.ietf.org/html/rfc4180) nicht gefunden. –

+0

Sie müssen keine einfachen Anführungszeichen usw. umgehen. Eine richtige CSV-Datei muss nicht einmal doppelte Anführungszeichen um ein Feld herum einfügen, das nur einfache Anführungszeichen enthält. Wenn der CSV-Reader ordnungsgemäß implementiert ist, sollte er die Datei auch mit diesen Symbolen korrekt lesen. –

Verwandte Themen