kableExtra将嵌入HTML转为转义文本问题求助
解决kableExtra导致嵌入HTML被转义的问题
当使用knitr生成HTML文档时,若结合formattable生成带样式的单元格,再用kableExtra::kable_styling()处理表格,会出现HTML代码被转义后直接显示的问题——注释掉kable_styling()则表格样式正常渲染。
核心解决方案
在kable_styling()中添加escape = FALSE参数,阻止kableExtra对表格内的HTML内容进行二次转义。
修改后的完整代码如下:
```{r setup, include=FALSE} knitr::opts_chunk$set(echo = TRUE) require(knitr) require(tidyverse) require(formattable) require(kableExtra)
animal <- tibble(animal=c("dog","cat"), height=c(18,25), weight=c(10,12)) animal |> mutate(height = color_tile("white","#DE8C59")(height)) |> knitr::kable( col.names=c('Animal','Height','Weight'), escape = F ) |> kableExtra::kable_styling(escape = FALSE)
### 原理说明 `knitr::kable(escape = F)`仅控制kable本身不转义HTML,但`kable_styling()`默认会重新转义内容。通过显式设置`escape = FALSE`,确保formattable生成的样式标签能被浏览器正确解析渲染。 ### 替代方案(适配kableExtra原生工作流) 若想避免formattable与kableExtra的兼容问题,可直接使用kableExtra的`cell_spec()`实现背景色效果: ```r ```{r animal_table, echo=FALSE, results='asis'} animal <- tibble(animal=c("dog","cat"), height=c(18,25), weight=c(10,12)) animal |> mutate(height = cell_spec(height, background = scales::col_numeric(c("white", "#DE8C59"), domain = range(height))(height))) |> knitr::kable( col.names=c('Animal','Height','Weight'), escape = F ) |> kableExtra::kable_styling()
内容的提问来源于stack exchange,提问作者lilster
相关产品推荐
相关产品推荐

