我有一个webapp,允许用户在textarea中输入文本,然后按save。
然后将文本保存到xml clob中的数据库中,并通过webapp以html形式显示给用户。
特殊字符存在一些问题。
从文本区域保存到xml时,需要转义以下字符:
& < > " '
换行符将正确保存到xml中,但是当它们显示为html时,换行符没有任何效果。
这两个问题都可以通过以下方式解决。
以XML格式保存之前:
//get string from text area
string = string.replaceAll("&", "&");
string = string.replaceAll("<", "<");
string = string.replaceAll(">", ">");
string = string.replaceAll("\"", """);
string = string.replaceAll("\'", "'");
从xml中获取文字后
//get text from xml
string = string.replaceAll("\n", "<br/>");
此解决方案适用于我正在尝试实现的目标。
问题是,为了不重新发明轮子或优雅,是否有更好的或现有的解决方案来解决这类问题?
答案 0 :(得分:-1)
你走在正确的轨道上。通常,当您创建一个JEE Web应用程序时,您将一个类处理在一个名为ServletUtilities的类中处理此类常规转换的类。在其中,您可以使用静态方法调用,例如“过滤”,并将其传递给String参数。所以,你可以这样:
public class ServletUtilities
{
public static String filter(String input)
{
if(!hasSpecialChars(input))
{
StringBuffer filtered = new StringBuffer(input.length());
char c;
for(int i=0; i < input.length(); i++)
{
c = input.charAt(i);
switch(c)
{
case '<' : filtered.append("<");break;
case '>' : filtered.append(">");break;
case '"' : filtered.append(""");break;
case '&' : filtered.append("&");break;
//This next one is optional for the new line
case '\n' : filtered.append("<br>");break;
default: filtered.append(c);
}
}
return(filtered.toString());
}
}
private static Boolean hasSpecialChars(String input)
{
boolean flag = false;
if((input != null) && (input.length() > 0))
{
char c;
for(int i=0; i < input.length(); i++)
{
c = input.charAt(i);
switch(c)
{
case '<' : flag = true;break;
case '>' : flag = true;break;
case '"' : flag = true;break;
case '&' : flag = true;break;
//This next one is optional for the new line
case '\n' : flag = true;break;
}
}
}
return flag;
}
}
希望这有帮助。