You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

jTidy 8字符编解码问题:URL中%7BA3被转换为汉字

解决jTidy 8自动转义URL中%7BA3为汉字的问题

问题复现

输入包含%7BA3的HTML链接:

<a href="https://example.com/%7BA3" rel="nofollow noreferrer">https://example.com/%7BA3</a>

经jTidy 8处理后,%7BA3被错误转换为汉字“箣”(对应URL编码%E7%AE%A3),输出变为:

<a href="https://example.com/%E7%AE%A3" rel="nofollow noreferrer">https://example.com/箣</a>

解决方案

方案1:调整jTidy核心配置

尝试组合以下配置参数,禁用URL修复并保留原始实体编码:

Tidy tidy = new Tidy();
// 禁用URL自动修复
tidy.setFixUri(false);
// 保留原始HTML实体
tidy.setPreserveEntities(true);
// 启用原始输出模式,避免额外转义
tidy.setRawOut(true);
// 指定输入输出编码为UTF-8,避免编码混乱
tidy.setInputEncoding("UTF-8");
tidy.setOutputEncoding("UTF-8");

// 执行解析处理
ByteArrayInputStream in = new ByteArrayInputStream(inputHtml.getBytes(StandardCharsets.UTF_8));
ByteArrayOutputStream out = new ByteArrayOutputStream();
tidy.parse(in, out);
String processedHtml = out.toString(StandardCharsets.UTF_8);

方案2:临时占位符绕过解析

如果配置调整无效,可通过占位符替换避开jTidy的URL解析逻辑:

  1. 处理前,将URL中的%7B替换为一个不会被转义的临时字符串(如__LEFT_BRACE__)
  2. 用jTidy处理HTML
  3. 处理后将占位符替换回%7B

示例代码:

String inputHtml = "<a href=\"https://example.com/%7BA3\" rel=\"nofollow noreferrer\">https://example.com/%7BA3</a>";
// 替换href中的%7B为占位符
String tempHtml = inputHtml.replaceAll("href=\"([^\"]*)%7B", "href=\"$1__LEFT_BRACE__");

// jTidy处理(可配合方案1的配置)
Tidy tidy = new Tidy();
tidy.setFixUri(false);
ByteArrayInputStream in = new ByteArrayInputStream(tempHtml.getBytes(StandardCharsets.UTF_8));
ByteArrayOutputStream out = new ByteArrayOutputStream();
tidy.parse(in, out);
String processedHtml = out.toString(StandardCharsets.UTF_8);

// 还原占位符为%7B
String finalHtml = processedHtml.replaceAll("__LEFT_BRACE__", "%7B");

方案3:检查jTidy版本与配置项

确认使用的jTidy版本是否为最新稳定版,部分旧版本可能存在URL解析的bug。同时尝试设置以下配置项:

// 禁用URI自动转义
tidy.setConfigurationOption("uri-escaping", "false");
// 启用原始URL处理
tidy.setConfigurationOption("raw-url", "true");

内容的提问来源于stack exchange,提问作者Vishal Sharnagat

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 13:02:10