【问题标题】:Unescaping by StringEscapeUtil from apache通过 StringEscapeUtil 从 apache 取消转义
【发布时间】:2013-07-04 07:59:29
【问题描述】:

有一个字符串:Character\5C&\22\3C\3E'我要转义。

有一个代码:

package escaping;

import org.apache.commons.lang.StringEscapeUtils;

public class UnEscapingDemo {

    public static void main(String[] args) {

       String str = StringEscapeUtils.unescapeHtml("Character\\5C&\\22\\3C\\3E'");

       System.out.println(str);

    }

}

但最终我并没有期待结果。我有同样的东西我已经放了..(没有转换它)”。

为什么?

--

编辑:

我believe这里的“3E”代表“>”..例如

所以,我期望的字符串是:Character\&"<>'

【问题讨论】:

  • 请澄清:你得到什么结果,你期待什么结果?
  • 你没有放入Html,这就是原因。不过我不知道你放的是什么。
  • 您希望在这里转义的真的是 HTML 吗?
  • 好的。让我考虑一下..我从 ldap 得到这个值。并且觉得我应该摆脱它。
  • 所以,我相信那是关于永无止境但不是逃避

标签: java escaping apache-commons


【解决方案1】:

您提到的不是 HTML,而是 URI 编码。在 HTML 中,< 将是 <,> 将是 >。

您应该看看这个thread,并阅读 Tim Cooper 和 Draemon 的帖子。

【讨论】:

  • 这甚至不是 URI 编码。反斜杠在 URI 中是不合法的。
  • 我的意思是问题的编辑部分 (I believe that "3E" here is stands for ">")
【解决方案2】:

嗯,这种奇怪的转义语法来自 OpenLdap...

那么这对我有用:

 public static void main(String[] args) throws UnsupportedEncodingException {

        String input = "Character\\5C&\\22\\3C\\3E'";

       input = input.replace("\\", "%");

       String result = URLDecoder.decode(input, "UTF-8");

       System.out.println(result);

    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-09-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-14
    相关资源
    最近更新 更多