Java可以使用例如Apache CommonsText StringEscapeUtils,但它将使用html实体名称,而不是数字。那么>变成了>有没有一个库或者类或者一些可行的自定义方法可以使用html实体编号,所以>变成了>,€变成了€等等?(上下文:我使用的平台中,出于安全原因,某些进程不再接受使用实体名称的转义html,所以我真的需要实体编号)。
>
>
>
€
€
2sbarzqh1#
似乎没有。Apache Commons Text库将值直接Map到名称。Apache Commons Text -EntityArrays.java您可以使用基本集合"、&、<和>创建自己的实现。
"
&
<
String escape(String string) { StringBuilder escaped = new StringBuilder(); for (char character : string.toCharArray()) { switch (character) { case '"', '&', '<', '>' -> { escaped.append("&#%d;".formatted((int) character)); } default -> escaped.append(character); } } return escaped.toString(); }
输入
<html>stack overflow</html>
输出量
<html>stack overflow</html>
如果您希望创建一个escape模式,它将封装更大范围的值,您可以实现一个range参数。注意,这里的范围是允许的代码点,而不是要转义的代码点。
escape
record Range(int start, int limit) { } /** @param ranges allowed code-points */ String escape(String string, Range... ranges) { StringBuilder escaped = new StringBuilder(); int codePoint; boolean allowed; for (char character : string.toCharArray()) { codePoint = (int) character; allowed = false; for (Range range : ranges) { if (codePoint >= range.start && codePoint <= range.limit) { allowed = true; break; } } if (allowed) escaped.append(character); else escaped.append("&#%d;".formatted(codePoint)); } return escaped.toString(); }
piwo6bdm2#
您也可以使用org.springframework.web.util.HtmlUtils中的方法:
org.springframework.web.util.HtmlUtils
//Send a input string in parameter HtmlUtils.htmlEscapeDecimal(String input)
我希望它能像你期望的那样为你工作。
2条答案
按热度按时间2sbarzqh1#
似乎没有。
Apache Commons Text库将值直接Map到名称。
Apache Commons Text -EntityArrays.java
您可以使用基本集合
"
、&
、<
和>
创建自己的实现。输入
输出量
如果您希望创建一个
escape
模式,它将封装更大范围的值,您可以实现一个range参数。注意,这里的范围是允许的代码点,而不是要转义的代码点。
piwo6bdm2#
您也可以使用
org.springframework.web.util.HtmlUtils
中的方法:我希望它能像你期望的那样为你工作。