R Unescape HTML&#nn;序列

R Unescape HTML&#nn;序列,r,R,例如,我的文本有一些HTML转义字符,而不是,有'。现在我想取消这些序列。因为我不知道哪些字符被转义,所以我不想使用简单的映射,例如在c(';“=””,…)中 据我所知,与符号后的数字是十进制unicode数字。因此,"代码"和"39,是\u27,因为27是39的十六进制表示。所以我想了一个解决方案 sprintf("\u%x", s) 其中,s是&和之间提取的数字。但是,这会导致错误:“\u未使用十六进制数。” 将HTML转义序列转换回字符的更好方法是什么?仅供参考,以下是我提出

例如,我的文本有一些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和NPM
    apt 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 &amp; last year&#39;s resolutions"
    strdehtml(test)
    [1] "My this & last year's resolutions"