混合字符串中的JavaScript \x转义

4

我有一个字符串,是通过使用Ajax加载网页预览获得的。标题显示如下:

You Can\xe2\x80\x99t Handle the Truth About Facebook Ads, New Harvard Study Shows

我需要将这些转义码替换为可读文本。我尝试过String.fromCharCode(),但是它在混合字符串的情况下不返回任何内容,只有当您只发送字符代码时才会返回内容。

是否有一个函数可以用来修复这个字符串?


1
AJAX 加载的到底是什么内容?而 AJAX 代码又是什么呢?通常解析内容时应该自动解析转义字符。 - Bergi
看起来真的很奇怪...那些是十六进制转义字符,但打印字符串却给我一堆乱码。为什么需要三个十六进制字节表示一个撇号? - Jared Smith
@JaredSmith 在UTF-8中使用花式Unicode撇号? - melpomene
在这种情况下,我认为字符串的编码已经损坏了。该字符串应该是“can't”。 - Bergi
简要来说,这是Ajax代码: $(“#id_url_text”)。on('input propertychange paste',function(){ $。ajax({ url:'/webproxy/?q=' + $(“#id_url_text”)。val(), type:'get', dataType:'html', crossDomain:true, success:function(data) { //var _html= jQuery(data); var div = document.createElement("div"); div.innerHTML = data; var titleSuggest = div.querySelector("meta[property='og:title']").getAttribute("content"); }, - Johnny Wales
2个回答

5
以下是一种实现方式:

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,右单引号)。


@Bergi 在这里你会如何使用 String.fromCharCode - melpomene
replace(/\\x([0-9a-f]{2})/gi, (_, c) => String.fromCharCode(parseInt(c, 16))) - Bergi
@Bergi 没错。\xe2\x80\x99需要转换成一个字符。 - melpomene

0

Melpomene已经提供了答案,我只想在这里添加一个额外的片段:上述解决方案对于某些情况会留下偶尔的\或\n,因此我进行了修改:

titleSuggest.replace(/(?:\\x[\da-fA-F]{2})+/g, m =>
decodeURIComponent(m.replace(/\\x/g, '%'))).replace(/\\n/g,
'<br>').replace(/\\/g, '')

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接