这与之前的问题有关,链接在这里:将\u转义的Unicode字符串转换为ASCII
我提出了一种解决方案,涉及
同样地,对于双引号也是如此。我认为未转义的 Unicode 等价物 \u0022 和 \u0027 不是问题,因为对于解析器来说,它们与普通的 " 和 ' 是相同的。
我是否漏掉了这种方法中的任何问题?
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 不是问题,因为对于解析器来说,它们与普通的 " 和 ' 是相同的。
我是否漏掉了这种方法中的任何问题?
eval
(也没有风险)的方式来解析转义字符串,那就太好了! - seancarmodyeval
的替代方案:https://dev59.com/4mMm5IYBdhLWcg3wO9Hy#17771985 - seancarmody