未验证 提交 bb382c88 编写于 作者: S Serge Rider 提交者: GitHub

Merge pull request #13064 from dbeaver/open-as-html-escape-entities#11423

#11423 Escape line separators as well in HTML exporter
......@@ -916,4 +916,18 @@ public class CommonUtils {
public static boolean isValidIndex(int index, int length) {
return index >= 0 || index < length;
}
@NotNull
public static String escapeHtml(@Nullable String text) {
if (text == null) {
return "&nbsp;";
}
return text
.replace("&", "&amp;")
.replace("<", "&lt;")
.replace(">", "&gt;")
.replace("\r\n", "<br>")
.replace("\r", "<br>")
.replace("\n", "<br>");
}
}
......@@ -31,10 +31,7 @@ import org.jkiss.utils.CommonUtils;
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
import java.io.Reader;
import java.io.*;
import java.util.Map;
/**
......@@ -164,24 +161,14 @@ public class DataExporterHTML extends StreamExporterAbstract {
private void writeTableTitle(String value, int columns) {
PrintWriter out = getWriter();
out.write(String.format("<th colspan=\"%d\">", columns));
if (value == null) {
out.write("&nbsp;");
} else {
value = value.replace("&", "&amp;").replace("<", "&lt;").replace(">", "&gt;");
out.write(value);
}
out.write(CommonUtils.escapeHtml(value));
out.write("</th>");
}
private void writeTextCell(String value, boolean header) {
PrintWriter out = getWriter();
out.write(header ? "<th>" : "<td>");
if (value == null) {
out.write("&nbsp;");
} else {
value = value.replace("&", "&amp;").replace("<", "&lt;").replace(">", "&gt;");
out.write(value);
}
out.write(CommonUtils.escapeHtml(value));
out.write(header ? "</th>" : "</td>");
}
......@@ -228,33 +215,16 @@ public class DataExporterHTML extends StreamExporterAbstract {
}
private void writeCellValue(Reader reader) throws IOException {
try {
try (BufferedReader bufferedReader = new BufferedReader(reader)) {
PrintWriter out = getWriter();
// Copy reader
char[] buffer = new char[2000];
for (; ; ) {
int count = reader.read(buffer);
if (count <= 0) {
break;
}
for (int i = 0; i < count; i++) {
if (buffer[i] == '<') {
out.write("&lt;");
} else if (buffer[i] == '>') {
out.write("&gt;");
}
if (buffer[i] == '&') {
out.write("&amp;");
}
out.write(buffer[i]);
String line = bufferedReader.readLine();
while (line != null) {
out.write(CommonUtils.escapeHtml(line));
line = bufferedReader.readLine();
if (line != null) {
out.write("<br>");
}
}
} finally {
ContentUtils.close(reader);
}
}
public boolean saveBinariesAsImages() {
return true;
}
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册