Dies wird auf eine frühere Anfrage bezogen, hier: Converting a \u escaped Unicode string to ASCIISanitizing Strings in R
ich eine Lösung vorgeschlagene Beteiligung eval(parse(text=x))
, die für Nicht-R Anwender bedeutet, was es sagt: die Textzeichenfolge Parsen, Auswerten es dann. Das Ziel war nicht zu erlauben, dass willkürlicher Code ausgeführt wird, aber entkomme nur entkommenen Unicodetext. Daraus ergibt sich die Lösung:
eval(parse(text=paste0("'", x, "'")))
Während dies ziemlich sicher das eingeschränkte Ziel gegeben sein sollte, würde ich gerne wissen: Wie viel sanitisation erforderlich ist, Dinge zu verwahren?
Zumindest denke ich, dass alle eingebetteten einfachen und doppelten Anführungszeichen maskiert werden müssen. Angenommen, wir
x <- "this is a '; print(dir()); 'string"
Dann eval
‚ing dies pro Snippet oben würde den Code in der Mitte ausführen müssen. Also müssen wir den Anführungszeichen entkommen:
eval(parse(text=paste0("'",
gsub("'", "\\\\'", x),
"'")))
Und ähnlich für doppelte Anführungszeichen. Ich glaube nicht, dass die unescaped Unicode-Entsprechungen \u0022
und \u0027
ein Problem sind, da sie für den Parser identisch mit Plain "
und '
sind.
Gibt es Löcher in diesem Ansatz, die ich verpasst habe?
Es wäre gut, wenn es ein Weg zu entkommen Strings zu analysieren, ohne die Maschinen (und Risiko) von 'eval'! – seancarmody
Ich habe eine Alternative ohne 'eval' gefunden: http://Stackoverflow.com/a/17771985/1543437 – seancarmody