R Unescape HTML&#nn;序列
例如,我的文本有一些HTML转义字符,而不是R Unescape HTML&#nn;序列,r,R,例如,我的文本有一些HTML转义字符,而不是,有'。现在我想取消这些序列。因为我不知道哪些字符被转义,所以我不想使用简单的映射,例如在c(';“=””,…)中 据我所知,与符号后的数字是十进制unicode数字。因此,"代码"和"39,是\u27,因为27是39的十六进制表示。所以我想了一个解决方案 sprintf("\u%x", s) 其中,s是&和之间提取的数字。但是,这会导致错误:“\u未使用十六进制数。” 将HTML转义序列转换回字符的更好方法是什么?仅供参考,以下是我提出
,
有'代码>。现在我想取消这些序列。因为我不知道哪些字符被转义,所以我不想使用简单的映射,例如在c(';“=””,…)
中
据我所知,与符号后的数字是十进制unicode数字。因此,"代码"和"39,
是\u27
,因为27是39的十六进制表示。所以我想了一个解决方案
sprintf("\u%x", s)
其中,s
是&
和之间提取的数字代码>。但是,这会导致错误:“\u未使用十六进制数。”
将HTML转义序列转换回字符的更好方法是什么?仅供参考,以下是我提出的解决方案。它利用了伟大的软件包gsubfn
:
library(gsubfn)
我将向量htmlchars
用于我从中获取的命名html实体。为简洁起见,我不复制此答案中的向量,而是从以下来源获取:
现在我想要的解码功能很简单:
strdehtml <- function(s) {
ret <- gsubfn("&#([0-9]+);", function(x) rawToChar(as.raw(as.numeric(x))), s)
ret <- gsubfn("&([^;]+);", function(x) htmlchars[x], ret)
return(ret)
}
strdehtml您还可以从R中作为系统命令调用Node.JS。Node.JS的包正好可以做到这一点。以下是说明:
Install Node.JS和NPMapt get Install nodejs NPM
安装html实体包npm安装html实体
从R调用Node.JS
print(system(command=“nodejs-e\”var Entities=require('html-Entities')。AllHtmlEntities;Entities=new Entities();console.log(Entities.decode('apos;&;&;&;copy;®;&8710;');\))
下面是上述命令的输出
”&™∆代码>有帮助吗?有一点,谢谢!
strdehtml <- function(s) {
ret <- gsubfn("&#([0-9]+);", function(x) rawToChar(as.raw(as.numeric(x))), s)
ret <- gsubfn("&([^;]+);", function(x) htmlchars[x], ret)
return(ret)
}
test <- "My this & last year's resolutions"
strdehtml(test)
[1] "My this & last year's resolutions"