В Java есть ли доступная или быстрая команда стороннего источника для преобразования специальных символов html в строку в HTML-кодированный контент?
Например:
Original code: <>&abcdef ©
After encoding: <>&abcdef©
В Java есть ли доступная или быстрая команда стороннего источника для преобразования специальных символов html в строку в HTML-кодированный контент?
Например:
Original code: <>&abcdef ©
After encoding: <>&abcdef©
Если вы хотите преобразовать строку в объекты HTML, чтобы быстро протестировать ее, вы можете использовать веб-службы, подобные этой:
http://www.primitivetype.com/resources/htmlentities.php
[EDIT] Для Java вы можете использовать StringEscapeUtils из Apache Commons Lang. Смотрите эту тему: Рекомендуемый метод экранирования HTML в Java
import static org.apache.commons.lang.StringEscapeUtils.escapeHtml;
// ...
String source = "The less than sign (<) and ampersand (&) must be escaped before using them in HTML";
String escaped = escapeHtml(source);
Я взял пример из упомянутого выше потока.
Перерабатывать
<→ & lt;
> → & gt;
'→ & # 39;
"→ "
& → &
Источник знаний: https://www.php.net/manual/en/function.htmlspecialchars.php
Это старый, но пока не принято ответа. Это моя версия с чистой Java:
public String toHTML(String str) {
String out = "";
for (char c: str.toCharArray()) {
if(!Character.isLetterOrDigit(c))
out += String.format("&#x%x;", (int)c);
else
out += String.format("%s", c);
}
return out;
}
Отлично работает с html5 и utf-8.
Javascript Solution: Найдите рабочую скрипку здесь: http://jsfiddle.net/ezmilhouse/Zb5C9/1/
===
В примере используются 2 функции, заимствованные из php.js:
get_html_translation_table()
https://github.com/kvz/phpjs/raw/master/functions/strings/get_html_translation_table.js
htmlentities()
https://github.com/kvz/phpjs/raw/master/functions/strings/htmlentities.js
Вот несколько java-кодов для максимально возможного репликации PHP htmlspecialchars (str):
Сначала давайте посмотрим, как работает PHP htmlspecialchars(str)
:
php> echo htmlspecialchars("abc\ndef");
abc
def
php> echo htmlspecialchars("abc&def");
abc&def
php> echo htmlspecialchars("abc<>\"&def");
abc<>"&def
php> echo htmlspecialchars("abc<>\"&d'ef");
abc<>"&d'ef
php> echo htmlspecialchars("abc< >\"&d'ef");
abc< >"&d'ef
php> echo htmlspecialchars("abc def");
abc def
php>
Примечания:
©
и символ евро €
, хранятся как есть.Код:
public class Main{
public static void main(String[] args) {
System.out.println("'" + stringToHtmlString("&") + "'");
System.out.println("'" + stringToHtmlString("<") + "'");
System.out.println("'" + stringToHtmlString(">") + "'");
System.out.println("'" + stringToHtmlString(" ") + "'");
System.out.println("'" + stringToHtmlString(" ") + "'");
System.out.println("'" + stringToHtmlString("&<>abc") + "'");
System.out.println("'" + stringToHtmlString("abc&<>") + "'");
}
public static final String stringToHtmlString(String s){
StringBuffer sb = new StringBuffer();
int n = s.length();
for (int i = 0; i < n; i++) {
char c = s.charAt(i);
switch (c) {
case '<': sb.append("<"); break;
case '>': sb.append(">"); break;
case '&': sb.append("&"); break;
case '"': sb.append("""); break;
default: sb.append(c); break;
}
}
return sb.toString();
}
}
Какие принты:
[email protected] ~ $ java Main
'&'
'<'
'>'
' '
' '
'&<>abc'
'abc&<>'
Это не идеальный клон функции PHP htmlspecialchars(str)
, но он достаточно близко для меня.
Здесь другой, который выполняет преобразования объектов html для обфускационных наборов символов: http://www.rgagnon.com/javadetails/java-0306.html