Язык JAVA просто
Экранирование символов — это замена в тексте управляющих символов на соответствующие текстовые подстановки (Escape-последовательности).
Пример: В Java текст можно представить в виде типа String, для обозначения данных которого используются управляющие символы — парные кавычки, которые обозначают начало и конец строки. Поэтому, чтобы вывести в кавычки в тексте и программа не восприняла бы эти символы как управляющие, необходимо преобразовать их в escape-последовательности.
Экранированиесимволов в Java (Escape-последовательности Java) в строках (строковых литералах):
\” – экранирование двойной кавычки, помогает, например, вывести символ двойной кавычки в тексте;
Пример экранирования одинарной кавычки для инициализации типа char одинарной кавычкой:
\\ – экранирование обратной косой черты (\) (слэш)
Символ обратной косой черты экранируют, например, для указания, что последующий символ не будет являтся частью escape-последовательности или при работе с путями к файлам.
\t — Символ табуляции (в java – эквивалент четырех пробелов)
(Однако, если длина строки, состоящая из четырех пробелов будет равна длине четырех символов, то длина строки с символом табуляции будет равна одному)
Символ табуляции часто используется для построения таблиц или псевдографических элементов интерфейса, т.к. это удобнее записи четырех пробелов.
\b — Символ возврата в тексте на один шаг назад или удаление последнего символа в строке вывода, подобно нажатию на клавишу backspace.
\n — Символ перехода на новую строку подобно нажатию на клавишу Enter
\r — Символ возврата каретки позволяет нам вернуть курсор к началу строки вывода и отображать новую информацию так, как будто ранее в этой строке ничего не было
\f— для обозначения, что текст необходимо начать печатать с новой страницы (Прогон страницы к началу следующей страницы)
В java экранирование символов используется и в форматировании строк. Например, задавая формат строки для отображения символа процента, необходимо продублировать символ процента – %%, иначе получим ошибку, а IDE будет предлагать дописать процент.
Как экранировать одинарные кавычки для вставки SQL… когда вставляемая строка находится в пользовательской переменной
Вы можете использовать StringEscapeUtils из библиотеки Apache Commons Lang. Используя это, вы можете избежать символов из html, xml, sql и т.д. Ищите метод escapeXXX для вашей цели. Для справки: когда мне нужно избежать строки HTML?
String str = FileUtils.readFileToString(new File("input.txt")); String results = StringEscapeUtils.escapeHtml(str); System.out.println(results);
Here is some "Text" that I'd like to be "escaped" for HTML & here is some Swedish: Tack. Vars?god.
<sometext> Here is some "Text" that I'd like to be "escaped" for HTML & here is some Swedish: Tack. Varsågod. </sometext>
В документации StringEscapeUtils для escapeSQL: «В настоящее время этот метод превращает только одинарные кавычки в двойные одинарные кавычки»
Этот подход работает только в том случае, если вы намереваетесь позже использовать ввод как вывод HTML. Что касается устаревания, v3.6 из commons-lang все еще там и прекрасно работает с org.apache.commons.text. StringEscapeUtils .
Используйте собственный метод Android, предназначенный именно для этой цели:
DatabaseUtils.sqlEscapeString(String)
Вот документация для него онлайн:
Главным преимуществом использования этого метода, на мой взгляд, является самодокументация из-за явного имени метода.
String userString="a'bcd"; String insertTableSQL = "INSERT INTO myTable " + "(insertColumn) " + "VALUES(" +"'"+DatabaseUtils.sqlEscapeString(userString)+"'" +")"; statement.executeUpdate(insertTableSQL);
Ещё вопросы
- 1 Линия между двумя перетаскиваемыми точками на холсте matplotlib pyqt5
- 1 Как это сделать, если вы не хотите читать всю строку?
- 1 UserControl Fire Событие при изменении свойства
- 0 Создание настраиваемых пользователем функций в JavaScript или jQuery
- 0 Кнопка поиска внутри поля поиска
- 1 Как добиться старого появления сообщения об ошибке в дизайне материала TextInputLayout? [Дубликат]
- 1 Объединение массивов Numpy 2d при гарантированном ненулевом равенстве
- 1 Adview не отображается в Android
- 0 Получение Mac (системного физического адреса) адреса успешно на локальном хосте, но не на сервере
- 0 MySQL двухколонный уникальный ключ
- 0 Как я могу удалить выбранную строку в таблице HTML, а также в MySQL, используя CodeIgniter?
- 0 Можно ли использовать класс шифрования в коде воспламенителя для отправки защищенных данных в URL?
- 0 Один пользователь несколько адресов доставки, как сделать это по умолчанию
- 0 scanf может читать только 3 символа в 5-позиционном массиве символов
- 0 JQuery Mouseleave стрельбы преждевременно в т. е. (8 и 9)
- 0 Захватить jQuery Маскированный ввод Изменение ввода
- 1 Как настроить app.config для получения тестовых данных из файла Excel с помощью Nunit?
- 0 Скользить вверх переходы
- 0 Выберите самый верхний недублированный элемент после упорядочения по другим столбцам [дубликаты]
- 0 Как сделать так, чтобы изображение всегда загружалось в центре страницы?
- 1 Получить значение из ListBox, содержащего TextBlocks, используя SelectedItem в WPF
- 0 используя jQuery, чтобы снять все флажки, а затем проверить установленный
- 1 Захват изображения с камеры. Фрагмент потерян, перейдите к предыдущему фрагменту.
- 1 Mastercard Обходной путь для сторонних cookie-файлов отключенных пользователей
- 0 Граница не адаптируется к стилю списка: нет;
- 0 Как отобразить массив объектов в шаблоне страницы в Pyramid?
- 1 Любые предложения о том, как я могу создать ссылку электронной почты в кнопке Java
- 0 Невозможно использовать возвращаемое значение метода в контексте записи
- 0 Размер текстового поля Yii timepicker
- 0 Присоединение узла к LinkedList
- 0 содержание аккордеона не отображается — JQuery
- 1 Asp.Net C # MVC Динамические формы (изменение структуры Dom и получение данных на сервер)
- 1 Как вызвать Interstitial, нажав на элемент в списке, который проходит через адаптер?
- 0 Как правильно выровнять то, что изменяет размеры в определенном месте
- 0 Создание редактируемого выпадающего списка
- 1 правильный ООП и гибкость между классами в Java
- 0 как не выбрать некоторые данные с помощью xpath в webharvest
- 0 QDialog закрашивает виджеты черным при добавлении новых
- 1 Метод, который принимает строго типизированное имя свойства в качестве параметра
- 0 Как использовать функцию std :: transform ()
- 1 Создание прокручиваемого «графика» в c # (визуализация данных)
- 0 Получение информации о состоянии браузера с помощью JQuery
- 1 Использование argv для изменения каталога при запуске файла python
- 0 Facebook API — реализация приглашения друзей, как на Quora
- 1 Некоторые поля в документе могут быть пустыми, и если я пытаюсь получить результат, приложение вылетает из-за nullPointerException [duplicate]
- 0 Доступ к области действия из другой директивы
- 0 php array_rand многомерное значение
- 1 Поворот холста и представление растрового изображения
Как экранировать символы кавычек «» в MySQL и Java
Как мы можем избежать символов quotes «» в Java и MySQL?
Входящий XML-файл содержит кавычки, и я анализирую этот файл с помощью Java. Поэтому я хочу избежать кавычек здесь, но в базе данных они должны содержать кавычки. Когда я делаю запрос, в результате будут кавычки. При отображении на веб-странице также должны отображаться цитаты.
Входящий xml-файл имеет кавычки, и я анализирую этот файл с помощью java, поэтому я хочу избежать кавычек здесь, но в базе данных он должен содержать кавычки, и пока я выполняю запрос, результат будет иметь кавычки, а при отображении на веб-странице также должен показывать кавычки. Надеюсь, я немного проясняю себя
Вы задаете кучу разных вопросов. Экранирование XML, экранирование Java, экранирование SQL и экранирование для «веб-страниц» (которые могут быть, например, комбинацией HTML, JavaScript и CSS) — все это разные вещи.
5 ответов
Позвольте мне попытаться понять .
Входящий файл содержит кавычки. Вы хотите отправить его в базу данных. Когда вы получите его обратно из базы данных, вы все равно захотите, чтобы эти цитаты были там.
Итак, проблема возникает только в базе данных или из нее?
Если это так, то я очень подозреваю, что вы делаете что-то в следующем порядке: (я помещаю это в заявление об отказе от ответственности, чтобы ничего не подозревающие не понимали и не вставляли / вставляли в свои собственные приложения.;))
Плохо — не делай этого
String sql = "insert into foo (bar,baz) values(" +myValue1 + ", " + myValue2 + ")"; Statement stmt = connection.createStatement(); stmt.executeUpdate(sql);
Плохо — не делай этого
Если это так, то вам действительно следует использовать как минимум параметры подготовленного оператора. а) вы будете менее уязвимы для вредоносного мусора, удалив все ваши таблицы, и б) у вас не будет проблем с побегом.
String sql = "insert into foo (bar, baz) values( ?, ? )"; PreparedStatement stmt = connection.prepareStatement(sql); stmt.setString(1, myValue1); stmt.setString(2, myValue2); stmt.executeUpdate();
Обратите внимание, что это также безопаснее в случае таких вещей, как CLOB и особенности различных реализаций баз данных (я думаю о вас, Oracle>))
Если это какой-то другой вид экранирования, то есть в / из XML или в / из HTML, тогда это другое, но оно хорошо документировано во всей сети.
Или предоставьте пример кода, если я совершенно не в курсе.
Ааа! Спасибо! У меня были проблемы с escape-символами в очень похожей ситуации, и я также задавался вопросом об уязвимостях SQL Injection. Разговор об убийстве двух зайцев одним выстрелом, спасибо.
Типичный escape-символ для всего — это обратная косая черта \ .