我有一个字符串,是通过使用Ajax加载网页预览获得的。标题显示如下:
You Can\xe2\x80\x99t Handle the Truth About Facebook Ads, New Harvard Study Shows
我需要将这些转义码替换为可读文本。我尝试过String.fromCharCode()
,但是它在混合字符串的情况下不返回任何内容,只有当您只发送字符代码时才会返回内容。
是否有一个函数可以用来修复这个字符串?
我有一个字符串,是通过使用Ajax加载网页预览获得的。标题显示如下:
You Can\xe2\x80\x99t Handle the Truth About Facebook Ads, New Harvard Study Shows
我需要将这些转义码替换为可读文本。我尝试过String.fromCharCode()
,但是它在混合字符串的情况下不返回任何内容,只有当您只发送字符代码时才会返回内容。
是否有一个函数可以用来修复这个字符串?
const str_orig = 'You Can\\xe2\\x80\\x99t Handle the Truth About Facebook Ads, New Harvard Study Shows';
console.log("Before: " + str_orig);
const str_new = str_orig.replace(
/(?:\\x[\da-fA-F]{2})+/g,
m => decodeURIComponent(m.replace(/\\x/g, '%'))
);
console.log("After: " + str_new);
这个想法是通过将字符串中的\x
替换为%
(生成URL编码字符串),然后应用decodeURIComponent
。它会帮我们处理UTF-8解码,将%e2%80%99
转换成单个字符:’
(U+2019,右单引号)。
String.fromCharCode
? - melpomenereplace(/\\x([0-9a-f]{2})/gi, (_, c) => String.fromCharCode(parseInt(c, 16)))
- Bergi\xe2\x80\x99
需要转换成一个字符。 - melpomeneMelpomene已经提供了答案,我只想在这里添加一个额外的片段:上述解决方案对于某些情况会留下偶尔的\或\n,因此我进行了修改:
titleSuggest.replace(/(?:\\x[\da-fA-F]{2})+/g, m =>
decodeURIComponent(m.replace(/\\x/g, '%'))).replace(/\\n/g,
'<br>').replace(/\\/g, '')