2016-08-29 2 views
1

Ich muss Benutzereingabe in meine YAML-Datei schreiben. Die Benutzereingabe muss als einfacher Text interpretiert werden. Was muss ich entkommen? Wie kann man dem entkommen?Escape-Benutzereingabe für YAML-Datei

Um die Yaml-Datei zu generieren, verwende ich Symfonys Yaml-Komponente. Zum Beispiel:

Code:

$result = ['key' => '@text']; 
echo $yaml->dump($result); 

tatsächliche Ausgang:

key: '@text' 

Wenn ich diese Ausgabe mit Symfony des yaml Service laden, erhalte ich einen fatalen Fehler:

Invalid type for path "key". Expected scalar, but got object.

Wunsch Ausgabe: (weil @ ist ein reserved indicator)

key: '@@text' 

Diese Ausgangslasten OK und wird als @text interpretiert.

+0

Ich würde hoffen, dass Symfony YAML-Komponente behandeln selbst umgehen würde ... – Chris

+0

@Chris mir auch, aber das ist nicht der Fall:/ –

+0

Könnten Sie Ihre Frage bearbeiten und fügen Sie ein Beispiel für die Eingabe, die nicht wie erwartet funktioniert, zusammen mit erwartete Ausgabe und tatsächliche Ausgabe? – Chris

Antwort

1

Der Ausgang ist absolut gültig. Der Kipper entkommt dem Wert, indem er ihn in einfache Anführungszeichen setzt. Es wäre ohne die einfachen Anführungszeichen ungültig.

Es gibt keinen Grund, dass die @ verdoppelt werden sollte und das Verdoppeln einer @ ist kein syntaktisches Gerät in YAML. @@text wäre immer noch ein ungültiger YAML-Skalar ohne Anführungszeichen.

+0

Es könnte sein, aber hat keine Bedeutung von Klartext. Wenn ich versuche, eine solche YAML-Datei zu laden, erhalte ich folgende Fehlermeldung: Ungültiger Typ für Pfad "Schlüssel". Erwarteter Skalar, aber Objekt erhalten. –

+0

'@text' ist ein zitierter YAML-Skalar. Es unterscheidet sich von einem einfachen Skalar (d. H. Einem ohne Anführungszeichen), da es immer als String interpretiert wird ("42" ist immer ein String, während "42" als Integer interpretiert werden kann). Wenn beim Laden der YAML ein Fehler auftritt, sollten Sie eine Frage dazu stellen. Es ist eine Information, die in Ihrer aktuellen Frage komplett fehlt. – flyx

+0

Ich habe das zur Frage hinzugefügt. –

Verwandte Themen