Преобразование значения ASCII в середине строки - PullRequest
0 голосов
/ 21 января 2019

У меня есть скрипт на PHP, который хранит значения в базе данных MySQL из интернет-магазина. Магазин позволяет клиентам оставлять сообщения, которые могут создать хаос, когда они используют смайлики. Чтобы эти символы не сломали мой скрипт, я использовал FILTER_SANITIZE_STRING и FILTER_FLAG_STRIP_HIGH во всех моих строках перед отправкой их всех в MySQL.

Это работает хорошо, за исключением того, что когда я снова отображаю его в написанной мной Java-программе, у меня будут такие вещи, как "I'm" вместо "I'm".

Есть ли способ заставить Java находить и преобразовывать значения ASCII обратно в символы?

Мой текущий план атаки состоит в том, чтобы иметь функцию, которая принимает каждый соответствующий строковый столбец, проверяет каждое слово, ища &#, находит позицию двоеточия после &#, заменяет это значение соответствующим ASCII символ и возвращает новую строку.

Это выполнимо, но я надеюсь, что есть способ сделать это, не изобретая колесо.

Редактировать: Спасибо @rzwitserloot за то, что он указал мне правильное направление, для тех, кто видит это и не читает мой комментарий в своем ответе, я использовал JSoup . Вот фрагмент заключительного раздела кода, относящегося к этому, на стороне Java для всех, кто работает через это:

// Connect method opens a connection to the MySQL server 
connect();
// Query the MySQL server 
resultSet = statement.executeQuery("select * from order_tracking order by DateOrdered");

// If there is any result, iterate through them until the end is reached. 
while (resultSet.next()) { 
  // Add each returned row into the list to send to the table
  Jsoup.parse(resultSet.getString(2)).text()
.
.
.
}

.text() в конце Jsoup.parse(String) избавляет от html-форматирования (то есть <Head><Body> и т. Д.), Который Jsoup автоматически добавляет и возвращает только текстовую часть с &#38; (или любым другим значением ascii может быть) правильно отформатирован.

Спасибо!

Ответы [ 2 ]

0 голосов
/ 21 января 2019

В вашей базе данных есть HTML-экранированные объекты.Это не идеально, но это легко изменить.Передайте строку в html_entity_decode(), чтобы отменить этот процесс.

0 голосов
/ 21 января 2019

Лучшее решение - просто исправить начальный бит: конечно, базы данных (и mysql в целом) могут хранить эмодзи, но mysql странный. UTF8 не UTF8, это неправильно. Настоящий utf8 в mysql называется utf8mb4. Используйте эту кодировку, и вы сможете хранить смайлики просто отлично.

Если эта опция вам не подходит, ваши строки закодированы в формате HTML. Решением является их HTML-декодирование. Java не поставляется с одним из коробки, вам нужна зависимость. Вот это, например: http://commons.apache.org/proper/commons-lang/javadocs/api-3.1/org/apache/commons/lang3/StringEscapeUtils.html#unescapeHtml4(java.lang.String)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...