@iDrugov
Хуже глупых вопросов только глупые ответы.

Почему windows-1251 из decodeURI?

Есть ссылка вида: <a href=link&p=любой_текст>

Я из неё выцепляю текст и отправляю в качестве аргумента методу VK API:
VK.api('method', {name:decodeURIComponent($(this)[0].href.match(/p=(.+)/)[1])}, function(r){
console.log(r);
});


так вот, если я передаю таким образом одно слово, например "любой", то всё срабатывает отлично - метод выполняется:
1240434b0b7a4d049fb112d3effd146f.PNG

Для любых составных текстов, типа "любой_текст" прилетает ошибка. В консоли можно наблюдать, что текст оказался не в UTF-8, а почему-то в cp-1251:
2381437abe6b4f1380ea97cc28f6fb5d.PNGПробовал:
  1. менять кодировку всех своих файлов (убедился, что все они UTF-8 без BOM);
  2. ставить "charset=utf-8" в script, meta и .htaccess;
  3. не использовать decodeURIComponent, тогда текст приходит в url-формате;
  4. использовать decodeURI, String() и обрабатывать текст на разных этапах.


Результат по-прежнему неудовлетворительный. Пишу на JS SDK, файлы с контентом подключаю через ajax (один раз, потом только внутри подключенного файла работаю).

Где собака зарыта?
  • Вопрос задан
  • 293 просмотра
Решения вопроса 1
@iDrugov Автор вопроса
Хуже глупых вопросов только глупые ответы.
Блин, нашёл, где косяк: надо было заменить нижнее подчёркивание на пробел, тогда текст почему-то остаётся в UTF-8 и метод срабатывает. Вот такое "очевидное" решение.

В конечном виде получилась регулярка:
decodeURIComponent($(this)[0].href.match(/p=(.+)/)[1].replace(/_/g, ' '));
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
Sanasol
@Sanasol Куратор тега JavaScript
нельзя просто так взять и загуглить ошибку
Зачем такой гемор с вытягиванием из ссылки?
ваш сайт же и ссылки.
Для начала заменить это $(this)[0].href.match(/p=(.+)/)[1])
на нормальный data-* атрибут попробовать, а дальше как пойдёт.

VK.api('method', {name:decodeURIComponent

что за метод-то секретный у открытого апи?
что за параметры?
зачем decodeURI если вы из ссылки вытягиваете, а не из адресной строки.

Ошибки тоже непонятные.
Смотрите в Network как там данные ходят, все понятно стать должно.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы