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

为什么Wget递归下载网站时会修改HTML中JS代码的字符编码?

问题根因

该问题由Wget的--convert-links参数的过度处理逻辑导致:Wget的链接转换功能会扫描页面所有内容中符合URL特征的片段,哪怕是位于JS代码的字符串拼接场景中,也会强制将相对路径补全为绝对路径,同时对拼接用的空格、+符号做HTML实体转义,最终破坏原有JS代码逻辑。
你之前尝试的编码、文件名限制类参数均无效,因为该问题是Wget链接转换逻辑的主动修改行为,和编码解析、文件名转义无关。另外Excel链接被优先识别是因为Wget扫描时会优先匹配常见静态资源后缀(包括.xls),因此这类拼接的Excel链接更容易被误处理。

解决方案

方案1:移除--convert-links参数(最简便)

如果不需要下载后离线打开所有站内链接,直接删除命令中的--convert-links参数即可完全避免JS代码被修改,调整后的命令如下:

data_dir="test_data"
mkdir $data_dir

urls="https://aarsrapport.smn.no/2020/"

wget --recursive --level=inf --page-requisites --adjust-extension --no-parent --restrict-file-names=ascii --remote-encoding=utf-8 --directory-prefix="$data_dir" $urls

方案2:保留离线浏览能力的两步处理法

如果需要保留链接转换功能方便离线浏览,可以分两步执行:

  1. 先不带--convert-links参数执行递归下载,保证所有原始文件内容完整
  2. 下载完成后,用sed工具批量修复所有HTML文件中被转义的JS拼接代码:
find $data_dir -name "*.html" -exec sed -i 's/ + / + /g' {} \;

如果还有其他转义字符被误转换,可以对应补充sed替换规则即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 14:45:03