【发布时间】:2021-03-11 13:25:28
【问题描述】:
我使用browserless.js(无头Chrome)来获取网站的html代码,然后使用正则表达式查找某些图像URL。
一个例子如下:
https://vignette.wikia.nocookie.net/moviepedia/images/8/88/Adrien_Brody.jpg/revision/latest/top-crop/width/360/height/450?cb\u003d20141113231800\u0026path-prefix\u003dde
有\u003d等unicode字符,应该解码(在本例中为=)。原因是我想将这些图像包含在一个站点中,并且如果不解码,其中一些无法显示(就像上面的那个,只需粘贴 URL;它会给出broken-image.webp)。
我尝试了很多东西,但没有任何效果。
JSON.parse(JSON.stringify(...))String.prototype.normalize()decodeURIComponent
奇怪的是,“\u003d”(即 js 中的“\\u003d”)的正则表达式与上面的字符串不匹配,但“u003d”却匹配。
这一切都很奇怪,我目前的猜测是无浏览器在幕后造成了一些奇怪的格式。也就是说,当我在控制台记录 URL 并将其复制粘贴到其他地方时,上述每种方法都适用于解码。
我希望有人可以帮助我。
【问题讨论】:
-
最简单的解决方案应该是
JSON.parse(`"${url}"`),更精确的解决方案可能是url.replace(/\\u([0-9a-fA-F]{4})/g, u => String.fromCharCode("0x"+u.slice(2))) -
非常感谢!我想知道为什么你的正则表达式有效,我的不匹配任何东西。 PS:如果您发布答案,我会接受。
标签: javascript unicode escaping decoding headless