này liên quan đến một câu hỏi trước, ở đây: Converting a \u escaped Unicode string to ASCIIchuỗi Vệ sinh trong R
tôi đề xuất một giải pháp liên quan đến eval(parse(text=x))
, mà cho người dùng không-R, có nghĩa là những gì nó nói: phân tích các chuỗi văn bản, sau đó đánh giá nó. Mục đích là không phải để cho phép mã tùy ý được thực hiện, nhưng chỉ để bỏ thoát khỏi văn bản Unicode đã thoát. Do đó giải pháp:
eval(parse(text=paste0("'", x, "'")))
Mặc dù điều này khá an toàn vì mục tiêu bị hạn chế, tôi muốn biết: cần bao nhiêu vệ sinh để giữ an toàn?
Ở mức tối thiểu, tôi đoán bất kỳ dấu ngoặc kép đơn và kép nào đều phải được thoát. Ví dụ: giả sử chúng tôi có
x <- "this is a '; print(dir()); 'string"
Khi đó đoạn mã trên sẽ thực thi mã ở giữa. Vì vậy, chúng tôi phải thoát khỏi các dấu ngoặc kép:
eval(parse(text=paste0("'",
gsub("'", "\\\\'", x),
"'")))
Và tương tự cho dấu ngoặc kép. Tôi không nghĩ rằng unescaped Unicode tương đương \u0022
và \u0027
là một vấn đề, vì trình phân tích cú pháp chúng sẽ giống hệt với đơn thuần "
và '
.
Có lỗ nào trong phương pháp này mà tôi đã bỏ lỡ không?
Sẽ tốt hơn nếu có một cách để phân tích chuỗi thoát mà không có máy móc thiết bị (và rủi ro) của 'eval'! – seancarmody
Tôi đã đưa ra một giải pháp thay thế mà không có 'eval': http://stackoverflow.com/a/17771985/1543437 – seancarmody