2014-01-13 3 views
0

У меня есть webapp, который позволяет пользователю вводить текст в текстовое поле, а затем нажать save.Обработка преобразования текста между java и xml

Текст затем сохраняется в базе данных в xml clob и отображается обратно пользователю через webapp как html.

Есть несколько вопросов со специальными символами.

При сохранении из области текста в XML, следующие символы должны быть экранированы: & < > " '

Newline символы будут сохранены в XML правильно, однако, когда они отображаются в виде HTML, символ новой строки не имеют никакого эффекта.

Оба эти вопроса могут быть решены следующим образом.

Перед сохранением в формате XML:

//get string from text area 
string = string.replaceAll("&", "&amp;"); 
string = string.replaceAll("<", "&lt;"); 
string = string.replaceAll(">", "&gt;"); 
string = string.replaceAll("\"", "&quot;"); 
string = string.replaceAll("\'", "&apos;"); 

После принятия текста из XML:

//get text from xml 
string = string.replaceAll("\n", "<br/>"); 

Это решение отлично работает для того, что я пытаюсь добиться.

Вопрос в том, чтобы не изобретать колесо или элегантность, есть ли лучшее или существующее решение этой проблемы?

ответ

-1

Вы на правильном пути. Как правило, при создании веб-приложения JEE вы объединяете класс, который обрабатывает общие преобразования, подобные этому, в классе с именем 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("&lt;");break; 
      case '>' : filtered.append("&gt;");break; 
      case '"' : filtered.append("&quot;");break; 
      case '&' : filtered.append("&amp;");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; 
    } 
} 

Надеюсь, это поможет.

Смежные вопросы