diff --git a/src/main/java/com/contentstack/utils/node/NodeToHTML.java b/src/main/java/com/contentstack/utils/node/NodeToHTML.java
index a0852ee..4ed0a7c 100644
--- a/src/main/java/com/contentstack/utils/node/NodeToHTML.java
+++ b/src/main/java/com/contentstack/utils/node/NodeToHTML.java
@@ -29,35 +29,44 @@ private NodeToHTML() {
*/
public static String textNodeToHTML(JSONObject nodeText, Option renderOption) {
String text = nodeText.optString("text");
- text = text.replace("\n", "
");
+ //Sanitization of text
+ String cleanedText = escapeTextNodes(text)
+ .replace("\n", "
")
+ .replace("\t", " ");
+
if (nodeText.has("superscript")) {
- text = renderOption.renderMark(MarkType.SUPERSCRIPT, text);
+ cleanedText = renderOption.renderMark(MarkType.SUPERSCRIPT, cleanedText);
}
if (nodeText.has("subscript")) {
- text = renderOption.renderMark(MarkType.SUBSCRIPT, text);
+ cleanedText = renderOption.renderMark(MarkType.SUBSCRIPT, cleanedText);
}
if (nodeText.has("inlineCode")) {
- text = renderOption.renderMark(MarkType.INLINECODE, text);
+ cleanedText = renderOption.renderMark(MarkType.INLINECODE, cleanedText);
}
if (nodeText.has("strikethrough")) {
- text = renderOption.renderMark(MarkType.STRIKETHROUGH, text);
+ cleanedText = renderOption.renderMark(MarkType.STRIKETHROUGH, cleanedText);
}
if (nodeText.has("underline")) {
- text = renderOption.renderMark(MarkType.UNDERLINE, text);
+ cleanedText = renderOption.renderMark(MarkType.UNDERLINE, cleanedText);
}
if (nodeText.has("italic")) {
- text = renderOption.renderMark(MarkType.ITALIC, text);
+ cleanedText = renderOption.renderMark(MarkType.ITALIC, cleanedText);
}
if (nodeText.has("bold")) {
- text = renderOption.renderMark(MarkType.BOLD, text);
+ cleanedText = renderOption.renderMark(MarkType.BOLD, cleanedText);
}
if (nodeText.has("break")) {
- if (!text.contains("
")) {
- text = renderOption.renderMark(MarkType.BREAK, text);
+ if (!cleanedText.contains("
")) {
+ cleanedText = renderOption.renderMark(MarkType.BREAK, cleanedText);
}
- // text = renderOption.renderMark(MarkType.BREAK, text);
+ // cleanedText = renderOption.renderMark(MarkType.BREAK, cleanedText);
}
- return text;
+ return cleanedText;
}
+ private static String escapeTextNodes(String input) {
+ return input.replace("&", "&")
+ .replace("<", "<")
+ .replace(">", ">");
+ }
}
diff --git a/src/main/java/com/contentstack/utils/render/DefaultOption.java b/src/main/java/com/contentstack/utils/render/DefaultOption.java
index cf6ffd3..015a76b 100644
--- a/src/main/java/com/contentstack/utils/render/DefaultOption.java
+++ b/src/main/java/com/contentstack/utils/render/DefaultOption.java
@@ -6,8 +6,6 @@
import com.contentstack.utils.node.MarkType;
import org.apache.commons.text.StringEscapeUtils;
import org.json.JSONObject;
-import org.jsoup.Jsoup;
-import org.jsoup.nodes.Document;
import java.util.*;
@@ -104,79 +102,77 @@ private String escapeInjectHtml(JSONObject nodeObj, String nodeType) {
public String renderNode(String nodeType, JSONObject nodeObject, NodeCallback callback) {
String strAttrs = strAttrs(nodeObject);
String children = callback.renderChildren(nodeObject.optJSONArray("children"));
- // Jsoup sanitization
- Document sanitizedChildren = Jsoup.parse(children);
- String cleanChildren = sanitizedChildren.body().html();
+
switch (nodeType) {
case "p":
- return "
" + cleanChildren + "
"; + return "" + children + "
"; case "a": - return "" + cleanChildren + ""; + return "" + children + ""; case "img": String assetLink = getNodeStr(nodeObject, "asset-link"); if (!assetLink.isEmpty()) { JSONObject attrs = nodeObject.optJSONObject("attrs"); if (attrs.has("link")) { - return "" + "