当前位置: 首页 > 知识库问答 >
问题:

Jsoup转换

苏波涛
2023-03-14

在少数情况下,我会传递JSON,其中包含用户执行某些操作的页面url。该页面url将有那些查询字符串部分,我需要为用户重定向到相同的页面时,从我的应用程序要求。我的JSON会像

{
"userId":"123456789",
"pageUrl":"http://exampl.com/designs.jsp?templateId=f348aaf2-45e4-4836-9be4-9a7e63105932&kind=123",
"action":"favourite"
}

但是当我通过Jsoup.clean(json,Whitelist.basic())运行这个json时,我看到


共有2个答案

督飞羽
2023-03-14

作为应用Jsoup.clean()后的解决方法,我正在替换

String url = Jsoup.clean(url, Whitelist.basic()).replaceAll("&", "&");

太叔望
2023-03-14

转义发生在org.jsoup.nodes.Entities中。这是有问题的代码

static void escape(StringBuilder accum, String string,
        Document.OutputSettings out, boolean inAttribute,
        boolean normaliseWhite, boolean stripLeadingWhite) {
    boolean lastWasWhite = false;
    boolean reachedNonWhite = false;
    EscapeMode escapeMode = out.escapeMode();
    CharsetEncoder encoder = out.encoder();
    CoreCharset coreCharset = CoreCharset.access$300(encoder.charset().name());
    Map map = escapeMode.getMap();
    int length = string.length();
    int codePoint;
    for (int offset = 0; offset < length; offset += Character.charCount(codePoint)) {
        codePoint = string.codePointAt(offset);

        if (normaliseWhite) {
            if (StringUtil.isWhitespace(codePoint)) {
                if ((stripLeadingWhite) && (!(reachedNonWhite)))
                    continue;
                if (lastWasWhite)
                    continue;
                accum.append(' ');
                lastWasWhite = true;
                continue;
            }
            lastWasWhite = false;
            reachedNonWhite = true;
        }

        if (codePoint < 65536) {
            char c = (char) codePoint;

            switch (c) {
            case '&':
                accum.append("&amp;");
                break;
            case ' ':
                if (escapeMode != EscapeMode.xhtml)
                    accum.append("&nbsp;");
                else
                    accum.append(c);
                break;
            case '<':
                if (!(inAttribute))
                    accum.append("&lt;");
                else
                    accum.append(c);
                break;
            case '>':
                if (!(inAttribute))
                    accum.append("&gt;");
                else
                    accum.append(c);
                break;
            case '"':
                if (inAttribute)
                    accum.append("&quot;");
                else
                    accum.append(c);
                break;
            default:
                if (canEncode(coreCharset, c, encoder))
                    accum.append(c);
                else if (map.containsKey(Character.valueOf(c)))
                    accum.append('&')
                            .append((String) map.get(Character.valueOf(c)))
                            .append(';');
                else
                    accum.append("&#x")
                            .append(Integer.toHexString(codePoint))
                            .append(';');
            }
        } else {
            String c = new String(Character.toChars(codePoint));
            if (encoder.canEncode(c))
                accum.append(c);
            else
                accum.append("&#x").append(Integer.toHexString(codePoint))
                        .append(';');
        }
    }
}

做你需要的事情的一个快速方法是使用这样的东西

String str = "http://exampl.com/designs.jsp?templateId=f348aaf2-45e4-4836-9be4-9a7e63105932&kind=123";
str = Jsoup.clean(str, Whitelist.basic());
System.out.println(str);
str = Parser.unescapeEntities(str, true);
System.out.println(str);

另一种方法是扩展上面的类并覆盖导致问题的方法,但是由于它只对包可见(默认可见性),这意味着您必须下载源代码,更改上面方法的可见性,并覆盖该类(这样该方法就可见了)。

 类似资料:
  • 我在jsoup中遇到了一个问题,我希望获得一行数据,稍后我将把该行插入另一个html文档中。但当我检查时,时间发现没有和标签。我该怎么解决呢

  • 问题内容: 请看下面的简化示例: 这打印出来,但我希望所选的html部分照原样打印:。我如何告诉jsoup不要转换’<’符号? 问题答案: 可以使用jsoup。 使用jSoup 1.8.3,可以使用保留原始html的Parser.unescapeEntities方法。 在某些以前的版本中,不存在此方法。 从此链接了解更多信息。

  • 当我解析本地HTML文件时,jsoup将锚元素中的引号改为 假设我想将下面HTML部分中的值“一”改为“二”: 我得到的是: 锚点元素内的引号是必需的。我的代码现在看起来像这样: 我试过了 没有成功。 我可以用jsoup实现这一点吗?我必须使用不同的解析器吗?那看起来会是什么样子。 提前非常感谢你。

  • jsoup 是一款 Java 的 HTML 解析器,可直接解析某个 URL 地址、HTML 文本内容。它提供了一套非常省力的 API,可通过 DOM、CSS 以及类似于 JQuery 的操作方法来取出和操作数据。 本站使用 jsoup 来解析 HTML。 jsoup的主要功能如下: 从一个URL,文件或字符串中解析HTML; 使用DOM或CSS选择器来查找、取出数据; 可操作HTML元素、属性、文

  • 问题内容: 期望: 结果: Jsoup可以将值HTML转换为XHTML吗? 问题答案: 见:

  • 我将html表格从网页复制到excel,并尝试使用下面的代码,但没有结果。请就如何解决这个问题提出建议。我做了所有的实验,但没有得到正确的结果。