问题描述
我当前在本地计算机上的Ghost CMS上托管博客,并使用wget从托管站点localhost:2368创建静态站点。它运作良好,但我面临的唯一问题是“ srcset”混乱了
<img class="post-card-image" srcset="content/images/size/w300/2020/08/logo-1--1.svg 300w,content/images/size/w600/2020/08/logo-1--1.svgg 600w,content/images/size/w1000/2020/08/logo-1--1.svgvg 1000w,content/images/size/w2000/2020/08/logo-1--1.svgsvg 2000w" sizes="(max-width: 1000px) 400px,700px" loading="lazy" src="content/images/size/w600/2020/08/logo-1--1.svg" alt="Test">
请注意,如何分别将600w,100w和2000w的扩展名混淆为svgg,svgvg和svgsvg。这样可以防止图像加载。我需要手动修复HTML中的扩展名。
使用浏览器在localhost:2368保存HTML不会出现此类问题。 使用浏览器保存HTML时的相同元素
<img class="post-card-image" srcset="/content/images/size/w300/2020/08/logo-1--1.svg 300w,/content/images/size/w600/2020/08/logo-1--1.svg 600w,/content/images/size/w1000/2020/08/logo-1--1.svg 1000w,/content/images/size/w2000/2020/08/logo-1--1.svg 2000w" sizes="(max-width: 1000px) 400px,700px" loading="lazy" src="/content/images/size/w600/2020/08/logo-1--1.svg" alt="Test">
我正在使用的wget命令是
from_url=localhost:2368
to_url=example.com
to_https=true
export_directory=dist
# copy blog content
wget --recursive --page-requisites --no-host-directories --remote-encoding=utf-8 --directory-prefix=${export_directory} --adjust-extension --restrict-file-names=windows --timeout=30 --no-parent --convert-links ${from_url}/
使用wget 1.20.3 我已经试过了--remote-encoding标志
解决方法
我看到了同样的事情,试图抓取一个 Wordpress 网站。 srcset 列表中每个逗号分隔元素的末尾从空格开始被修改,额外的字符替换了空格和条件。
我挖掘了源代码,发现在计算 srcset 中各个 URL 的长度时有问题 - 在转换最终文件时,代码会根据它的 URL 长度跳过它刚刚转换的 URL解析元素时看到。 但是解析是在对原始网址中的转义进行解码后进行的,因此跳过的长度可能太短(因为解码可能会减少网址的长度)。
我设法通过计算重新转义的 URL 的长度来修补它以处理我的情况。我在
上发布了一个补丁https://lists.gnu.org/archive/html/bug-wget/2020-12/msg00021.html