Antes de votar por el cierre como duplicado, asegúrese de que realmente responda a mi pregunta particular aquí. Las preguntas pueden parecer similares, pero no he encontrado una respuesta para la mía. Gracias.


Estoy buscando una forma de convertir caracteres escalares arbitrarios en su forma codificada en HTML. No solo quiero codificar <, ", etc., sino todo el texto.

Entonces el texto de la forma

"<abc at def.gh>"

Estar codificado como

"&#x3c;&#x61;&#x62;&#x63;&#x20;&#x61;&#x74;&#x20;&#x64;&#x65;&#x66;&#x2e;&#x67;&#x68;&#x3e;"

Mi objetivo es la compatibilidad con la forma en que CRAN codifica las direcciones de correo electrónico de los mantenedores. Entonces, el < no debería ser un &lt; pero debería ser &#x3c;. De manera similar, . no debería ser &period; pero debería ser &#x2e;.

Para verlo en CRAN, puede visitar la página CRAN de cualquier paquete, es decir, https: //cran.r -project.org/package=curl, luego "ver fuente" y buscar el campo Maintainer allí.

Estoy buscando una solución liviana que requiera la menor cantidad de dependencias posible, no tiene por qué ser rápida.

Como referencia, una herramienta en línea para decodificar cadenas codificadas: https://onlineasciitools.com/convert -html-entidades-a-ascii

3
jangorecki 20 oct. 2020 a las 16:15

1 respuesta

La mejor respuesta

Aquí hay algo rápido (no probado a fondo). Se inspiró en otra respuesta SO.

foo <- function(x) {
  splitted <- strsplit(x, "")[[1]]
  intvalues <- as.hexmode(utf8ToInt(enc2utf8(x)))
  paste(paste0("&#x", intvalues, ";"), collapse = "")
}

all.equal(
  foo("<abc at def.gh>"),
  "&#x3c;&#x61;&#x62;&#x63;&#x20;&#x61;&#x74;&#x20;&#x64;&#x65;&#x66;&#x2e;&#x67;&#x68;&#x3e;"
)
# [1] TRUE
3
sindri_baldur 20 oct. 2020 a las 13:49