ATUALIZAÇÃO : Por favor, note que esta é uma solução que deve ser aplicada a navegadores mais antigos ou plataformas sem navegadores e é mantida ativa para fins de instrução. Consulte a resposta de @radicand abaixo para obter uma resposta mais atualizada.
Esta é uma string unicode com escape. Primeiro, a string foi escapada e, em seguida, codificada com Unicode. Para converter de volta ao normal:
var x = "http\\u00253A\\u00252F\\u00252Fexample.com";
var r = /\\u([\d\w]{4})/gi;
x = x.replace(r, function (match, grp) {
return String.fromCharCode(parseInt(grp, 16)); } );
console.log(x);
x = unescape(x);
console.log(x);
Para explicar: eu uso uma expressão regular para procurar \u0025
. No entanto, como preciso apenas de uma parte dessa string para minha operação de substituição, uso parênteses para isolar a parte que vou reutilizar 0025
,. Essa parte isolada é chamada de grupo.
A gi
parte no final da expressão indica que ela deve corresponder a todas as instâncias da string, não apenas à primeira, e que a correspondência deve ser insensível a maiúsculas e minúsculas. Isso pode parecer desnecessário dado o exemplo, mas adiciona versatilidade.
Agora, para converter de uma string para a próxima, preciso executar algumas etapas em cada grupo de cada correspondência, e não posso fazer isso simplesmente transformando a string. Felizmente, a operação String.replace pode aceitar uma função, que será executada para cada correspondência. O retorno dessa função substituirá a própria correspondência na string.
Eu uso o segundo parâmetro que esta função aceita, que é o grupo que preciso usar, e transformo-o na sequência utf-8 equivalente e, em seguida, uso a unescape
função interna para decodificar a string em sua forma adequada.