Javascript \ x экранируется в смешанной строке - PullRequest
0 голосов
/ 16 мая 2018

У меня есть строка, полученная с помощью Ajax для загрузки предварительного просмотра веб-страницы.Название выглядит так:

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

Мне нужно заменить эти управляющие коды на текст, читаемый человеком.Я пробовал String.fromCharCode(), но это ничего не возвращает в случае смешанной строки, только если вы отправляете ей только коды символов.

Есть ли функция, которую я могу использовать для исправления этой строки?

Ответы [ 2 ]

0 голосов
/ 17 мая 2018

У Мельпомены был ответ выше, я просто хотел добавить еще один фрагмент: здесь для некоторых случаев вышеприведенное решение оставляло случайный \ или \ n, поэтому я изменил его так:

titleSuggest.replace(/(?:\\x[\da-fA-F]{2})+/g, m =>
decodeURIComponent(m.replace(/\\x/g, '%'))).replace(/\\n/g,
'<br>').replace(/\\/g, '')
0 голосов
/ 16 мая 2018

Вот один из способов сделать это:

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, ПРАВАЯ ОДНОКВАЖНАЯ КВАРТИРА).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...