これは前の質問に関連しています。ここでは、 \u エスケープされた Unicode 文字列を ASCII に変換する
私は を含むソリューションを提案しましたeval(parse(text=x))
。これは、R を使用していないユーザーにとっては、テキスト文字列を解析してから評価するという意味です。その目的は、任意のコードの実行を許可することではなく、エスケープされた Unicode テキストのエスケープを解除することだけでした。したがって、解決策:
eval(parse(text=paste0("'", x, "'")))
制限された目的を考えると、これはかなり安全なはずですが、私は知りたいです:物事を安全に保つために必要なサニタイズはどれくらいですか?
少なくとも、埋め込まれた一重引用符と二重引用符はエスケープする必要があると思います。たとえば、
x <- "this is a '; print(dir()); 'string"
次にeval
、上記のスニペットに従ってこれを実行すると、コードが途中で実行されます。したがって、引用符をエスケープする必要があります。
eval(parse(text=paste0("'",
gsub("'", "\\\\'", x),
"'")))
二重引用符についても同様です。エスケープされていないUnicode に相当するもの\u0022
とは問題ではないと思います\u0027
。パーサーにとってはプレーンな"
and と同じになるからです'
。
私が見逃したこのアプローチの穴はありますか?