>我有一个网络应用程序,允许用户在文本区域中输入文本,然后按保存。
然后将文本以 xml clob 的形式保存到数据库中,并通过 Web 应用程序以 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/>");
此解决方案适用于我想要实现的目标。
问题是,为了不重新发明轮子或优雅,是否有更好的或现有的解决方案来解决此类问题?
你走在正确的轨道上。 通常,当您创建JEE Web应用程序时,您将一个名为ServletUtilities的类中组合了一个处理此类常规转换的类。 在其中,您可以调用一个静态方法,例如"filter",并向其传递一个 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;
}
}
希望这有帮助。