|
Причина неподдержки кириллицы в js-коде
Привет. Имеется большой сложный словарный скрипт, который делался для работы с латиницей — но при попытке добавить поддержку кириллицы, он не отрабатывает. То есть, когда по умолчанию юзер кликает на слово, набранное латиницей - задействуется приведенная ссылка, из которой апострофы и пробелы заменяются на URI-код:
Код:
<a href='?page=definition&word="+n.replace(/'/g,"%27").replace(/ /g,"%20")+"'>"+n+"</a> Код:
.replace(/а/g,"%430").replace(/о/g,"%43E") |
Используй на клиенте encodeURIComponent. На сервере соответствующий decode_uri для языка. Не надо делать своих нестандартных костылей.
|
То есть, если таким образом заменять буквы — работать не будет, потому что нужен encodeURIComponent? Сам не смогу его добавить и потестировать, потому спрашиваю.
|
Может и будет. Всё заисит от кодировки сервера, кодировки js-файла и кодировки html файла. Самые разные сочетания могут породить самые разные варианты кодирования символов и самые разные глюки.
В современном вебе везде используется utf8. Но в utf8 символ "а" кодируется как "%D0%B0", а не как "%430". encodeURIComponent обеспечивает стандартное кодирование безотносительно, но смысл имеет только если сервер раскодирует также по стандарту. |
А имеет значение, если это не сервер, а код приложения? То есть, это в приложении так реализовано, что через ссылку происходит переход к слову. Там тоже utf8, и замена с "%430" на "%D0%B0" изменений не дала.
|
Интересно, что если перед кириллицей стоит один символ латиницы (например: "fслово") — то переход срабатывает.
|
hdma,
Попробуй так: <a href='?page=definition&word="+encodeURIComponent(n).replace(/'/g,"%27")+"'>"+n+"</a> |
Спасибо, теперь начал видеть кириллицу в начале списка, но по-прежнему не переходит. Кажется дело в том, что ниже есть другая строка, в которой символы кодируются в обратную сторону:
{a=a.replace(/%20/g," ").replace(/%430/g,"а").replace(/%43E/g,"о").replace(/%27/g,"'"), Вообще говоря, речь о коде из этого приложения, с редким функционалом перехода по любым словам в тексте и поиска с подстановочными знаками, которые позволяют искать слова, правописание которых неизвестно. Там словарь на 200 тысяч слов очень экономно сделан. Если взглянете, тут по ссылке APK-файл, который можно открыть через любой архиватор — https://disk.yandex.ru/d/amhXyapjX_WA4Q, ну или установить на телефон. |
decodeURIComponent чтоб раскодировать.)
|
А как правильно записать это в строке? Так? —
{a=a.decodeURIComponent(n).replace(/%20/g," ").replace(/%27/g,"'"), |
Часовой пояс GMT +3, время: 14:59. |
|