diff --git a/R/footnote.R b/R/footnote.R
index be0ea04..e995af1 100644
--- a/R/footnote.R
+++ b/R/footnote.R
@@ -14,9 +14,10 @@
 #' "number", "alphabet" and "symbol".
 #'
 #' @export
-add_footnote <- function(input, label = NULL, notation = "alphabet",
+add_footnote <- function(input, label = NULL, notation = "alphabet", escape = T,
                          threeparttable = F) {
   if (is.null(label)){return(input)}
+
   # Define available id list
   if (!notation %in% c("number", "alphabet", "symbol")){
     warning('Please select your notation within "number", "alphabet" and ',
@@ -43,26 +44,32 @@
       "&sect;&sect;&sect;&sect;", "&para;&para;&para;&para;"
     ),
     symbol.markdown = c(
-      "\\*", "†", "‡", "§", "¶",
-      "\\*\\*", "††", "‡‡", "§§", "¶¶",
-      "\\*\\*\\*", "†††", "‡‡‡", "§§§", "¶¶¶",
-      "\\*\\*\\*\\*", "††††", "‡‡‡‡", "§§§§", "¶¶¶¶"
+      "\\*", "\u2020", "\u2021", "\u00A7", "\u00B6",
+      "\\*\\*", "\u2020\u2020", "\u2021\u2021", "\u00A7\u00A7", "\u00B6\u00B6",
+      "\\*\\*\\*", "\u2020\u2020\u2020", "\u2021\u2021\u2021",
+      "\u00A7\u00A7\u00A7", "\u00B6\u00B6\u00B6",
+      "\\*\\*\\*\\*", "\u2020\u2020\u2020\u2020", "\u2021\u2021\u2021\u2021",
+      "\u00A7\u00A7\u00A7\u00A7", "\u00B6\u00B6\u00B6\u00B6"
     ),
     symbol.pandoc = c(
-      "\\*", "†", "‡", "§", "¶",
-      "\\*\\*", "††", "‡‡", "§§", "¶¶",
-      "\\*\\*\\*", "†††", "‡‡‡", "§§§", "¶¶¶",
-      "\\*\\*\\*\\*", "††††", "‡‡‡‡", "§§§§", "¶¶¶¶"
+      "\\*", "\u2020", "\u2021", "\u00A7", "\u00B6",
+      "\\*\\*", "\u2020\u2020", "\u2021\u2021", "\u00A7\u00A7", "\u00B6\u00B6",
+      "\\*\\*\\*", "\u2020\u2020\u2020", "\u2021\u2021\u2021",
+      "\u00A7\u00A7\u00A7", "\u00B6\u00B6\u00B6",
+      "\\*\\*\\*\\*", "\u2020\u2020\u2020\u2020", "\u2021\u2021\u2021\u2021",
+      "\u00A7\u00A7\u00A7\u00A7", "\u00B6\u00B6\u00B6\u00B6"
     )
   )
   ids <- ids.ops[,notation]
   # pandoc cannot recognize ^*^ as * is a special character. We have to use ^\*^
   ids.intable <- gsub("\\*", "\\\\*", ids)
   ids.simple <- c(
-    "*", "†", "‡", "§", "¶",
-    "**", "††", "‡‡", "§§", "¶¶",
-    "***", "†††", "‡‡‡", "§§§", "¶¶¶",
-    "****", "††††", "‡‡‡‡", "§§§§", "¶¶¶¶"
+    "*", "\u2020", "\u2021", "\u00A7", "\u00B6",
+    "**", "\u2020\u2020", "\u2021\u2021", "\u00A7\u00A7", "\u00B6\u00B6",
+    "***", "\u2020\u2020\u2020", "\u2021\u2021\u2021",
+    "\u00A7\u00A7\u00A7", "\u00B6\u00B6\u00B6",
+    "****", "\u2020\u2020\u2020\u2020", "\u2021\u2021\u2021\u2021",
+    "\u00A7\u00A7\u00A7\u00A7", "\u00B6\u00B6\u00B6\u00B6"
   )
 
   #count the number of items in label and intable notation
@@ -117,6 +124,9 @@
 
   # Generate latex table footnote --------------------------------
   if(attr(input, "format")=="latex"){
+    # Clean the entry for labels when escape is enabled
+    if (escape = T){label <- knitr:::escape_latex(label)}
+
     kable_info <- magic_mirror(input)
     if(kable_info$tabular == "longtable"){
       if(notation != "number"){
@@ -220,6 +230,3 @@
   }
   return(export)
 }
-
-
-
diff --git a/R/magic_mirror.R b/R/magic_mirror.R
index d9d78d1..9995180 100644
--- a/R/magic_mirror.R
+++ b/R/magic_mirror.R
@@ -1,7 +1,8 @@
 #' Magic mirror that returns kable's attributes
 #'
 #' @param input The output of kable
-#'
+#' @importFrom knitr kable
+#' @import stringr
 #' @export
 
 magic_mirror <- function(input){
@@ -19,7 +20,8 @@
   return(kable_info)
 }
 
-#' Magic mirror for latex tables
+#' Magic mirror for latex tables --------------
+#' @param input The output of kable
 magic_mirror_latex <- function(input){
   kable_info <- list(tabular = NULL, booktabs = NULL, align = NULL,
                      ncol=NULL, nrow=NULL, colnames = NULL, rownames = NULL,
@@ -56,3 +58,46 @@
   kable_info$rownames <- str_extract(kable_info$contents, "^[^ &]*")
   return(kable_info)
 }
+
+#' Magic Mirror for html table --------
+#'
+#' @param input The output of kable
+#'
+#' @importFrom XML readHTMLTable
+magic_mirror_html <- function(input){
+  kable_info <- list(table.attr = NULL, align = NULL,
+                     ncol=NULL, nrow=NULL, colnames = NULL, rownames = NULL,
+                     caption = NULL, contents = NULL)
+  kable_data <- readHTMLTable(input[1])
+  # Caption
+  kable_info$caption <- names(kable_data)
+  # Contents
+  kable_info$contents <- kable_data[[1]]
+  # colnames
+  kable_info$colnames <- str_replace_all(
+    str_trim(names(kable_data[[1]])), "V[0-9]{1,2}", ""
+  )
+  # rownames
+  kable_info$rownames <- as.character(kable_data[[1]][,1])
+  if(str_trim(names(kable_data[[1]])[1]) != "V1"){
+    kable_info$rownames <- c(str_trim(names(kable_data[[1]])[1]),
+                             kable_info$rownames)}
+  # ncol
+  kable_info$ncol <- length(kable_info$colnames)
+  # nrow
+  kable_info$nrow <- length(kable_info$rownames)
+  # table.attr
+  kable_info$table.attr <- str_match(input, "<table class = '(.*)'>")[2]
+  # align
+  kable_info$align <- str_match_all(
+    input, 'style=\\"text-align:([^;]*);'
+    )[[1]][,2]
+  kable_info$align <- paste0(
+    str_extract(tail(kable_info$align, kable_info$ncol), "."), collapse = ""
+  )
+  return(kable_info)
+}
+
+#' @export
+magrittr::`%>%`
+
