2013-06-04 3 views
0

สวัสดี Mr.Java Sp'e c'i'a'l «» 'Специальные символы в JAVA

Я пытался разобрать строку, используя ниже код, но я could't сделать просто это показывает неправильное значение ,

String s = "สวัสดี Mr.Java Sp'e c'i'a'l'' '""; 
s = s.replaceAll("'", "'"); 
//s = s.replaceAll("'", "''"); 
StringEscapeUtils.escapeHtml(s); 

Я пытаюсь получить JSP и сохранить в SQL Server DB и показать с помощью JSP и обновления. Но несколько раз в JSP он отображает преобразованные & apos в jsp, а не специальные Chars.

Очень простой в этом я показал эту строку (สวัสดี Mr.Java Sp'e c'i'a'l «» «) в StackOverflow они сохранить в своей БД и показывает и позволяет мне обновлять это это то, что я хотел. хотел.

+0

ли это тип или ваша строка именно это? Потому что это не допустимая строка, она имеет «оставленную в покое». Вы должны удалить ее или удалить ее. – Djon

+0

Это просто пример, TYPO, но в текстовом поле JSP этому также будет разрешено вводить как примечание. – sunleo

+0

возможно, это связано с UTF-форматом. Возможно, ваш db не сохранил/поддерживал формат utf !!. – iMBMT

ответ

1

OK. Так что давайте посмотрим на то, что делает ваш код:

// line 1 
String s = "สวัสดี Mr.Java Sp'e c'i'a'l'' '"; 

У нас есть строки с различными международными символами в нем ... и некоторые "'" персонажей.

// line 2 
s = s.replaceAll("'", "'"); 

Если предположить, что те действительно "'" символов символы, мы заменим все экземпляры "'" с/HTML мнемоники XML дает нам:

"สวัสดี Mr.Java Sp'e c'i'a'l'' '" 

И так ...

// line 3 
s = StringEscapeUtils.escapeHtml(s); 

Это заменяет любые активные символы HTML/XML символьными ссылками. Сюда входят амперсанды "&", которые вы ранее вставляли. Результат таков:

"&#xxxx;&#xxxx;&#xxxx;&#xxxx; Mr.Java Sp'e 
c'i'a'l'' '" 

(?. Числовые ссылки на символы &#xxxx; кодируют эти тайские() символов)

Когда вы вставляете, что в HTML-документ и отображает его, вы увидите «สวัสดี Mr. Java-Sp & APOS; ес & APOS, я & APOS; а & APOS; л & APOS; & APOS; & APOS;»


Посмотрите, что произошло? У вас есть HTML, который ускользнул от ваших апострофов HTML !!


Так что вам действительно нужно делать?

  1. Нет необходимости в замене апострофов '. Апоптопы являются законными в тексте HTML.

  2. Там должно быть нет необходимости добавлять HTML ускользает, так что вы можете хранить текст в базе данных:

    • Любая современная база данных позволит вам хранить строки Unicode без какого-либо специального кодирования.

    • Если вы пытаетесь помешать анализу SQL базы данных путать кавычки в тексте, который вы храните, вы делаете это неправильно. right способ сделать это - использовать PreparedStatement, добавить заполнитель параметров в запрос и использовать методы PreparedStatement.setXxx для предоставления значений параметров. execute (или что-то еще) позаботится обо всех утечках SQL, которые необходимо выполнить.

+0

Спасибо за ваш ответ. но что произойдет, если я сделаю это без синтаксического анализа в SQL Сервер, который я не мог вставить ', и пока показывается это в текстовом поле jsp, он становится сломанным текстовым полем из-за'. – sunleo

+2

Что касается '' 'проблемы в SQL (то есть SQL-инъекции), это покрывается за счет правильного использования' PreparedStatement'. Если у вас возникли проблемы с '' 'в SQL, то вы, собственно, неправильно используете' PreparedStatement'. Что касается проблемы HTML в текстовом поле JSP в JSP (например, атака XSS), см. Http://stackoverflow.com/questions/4948532/где-надо-я-спусковое HTML-строка s-JSP-страницы или-сервлеты/4948856 # 4948856. Обобщены: do ** not ** избегать их перед сохранением в БД. Это не дает полного смысла, о чем свидетельствует ответ Стивена. – BalusC

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