
23.08.2021, 03:11
|
Аспирант
|
|
Регистрация: 28.05.2012
Сообщений: 85
|
|
Причина неподдержки кириллицы в js-коде
Привет. Имеется большой сложный словарный скрипт, который делался для работы с латиницей — но при попытке добавить поддержку кириллицы, он не отрабатывает. То есть, когда по умолчанию юзер кликает на слово, набранное латиницей - задействуется приведенная ссылка, из которой апострофы и пробелы заменяются на URI-код:
Код:
|
<a href='?page=definition&word="+n.replace(/'/g,"%27").replace(/ /g,"%20")+"'>"+n+"</a> |
Но если точно так же заменять кириллические буквы на код — почему-то код не срабатывает:
Код:
|
.replace(/а/g,"%430").replace(/о/g,"%43E") |
Может кто знает: действительно ли проблема заключается в этой ссылке, и в ней нужно учесть какие-то особенности при работе с кириллицей — или дело в другом?
|
|

23.08.2021, 03:46
|
 |
Тлен
|
|
Регистрация: 02.01.2010
Сообщений: 6,590
|
|
Используй на клиенте encodeURIComponent. На сервере соответствующий decode_uri для языка. Не надо делать своих нестандартных костылей.
__________________
29375, 35
|
|

23.08.2021, 03:58
|
Аспирант
|
|
Регистрация: 28.05.2012
Сообщений: 85
|
|
То есть, если таким образом заменять буквы — работать не будет, потому что нужен encodeURIComponent? Сам не смогу его добавить и потестировать, потому спрашиваю.
|
|

23.08.2021, 04:22
|
 |
Тлен
|
|
Регистрация: 02.01.2010
Сообщений: 6,590
|
|
Может и будет. Всё заисит от кодировки сервера, кодировки js-файла и кодировки html файла. Самые разные сочетания могут породить самые разные варианты кодирования символов и самые разные глюки.
В современном вебе везде используется utf8. Но в utf8 символ "а" кодируется как "%D0%B0", а не как "%430".
encodeURIComponent обеспечивает стандартное кодирование безотносительно, но смысл имеет только если сервер раскодирует также по стандарту.
__________________
29375, 35
|
|

23.08.2021, 05:09
|
Аспирант
|
|
Регистрация: 28.05.2012
Сообщений: 85
|
|
А имеет значение, если это не сервер, а код приложения? То есть, это в приложении так реализовано, что через ссылку происходит переход к слову. Там тоже utf8, и замена с "%430" на "%D0%B0" изменений не дала.
|
|

23.08.2021, 05:17
|
Аспирант
|
|
Регистрация: 28.05.2012
Сообщений: 85
|
|
Интересно, что если перед кириллицей стоит один символ латиницы (например: "fслово") — то переход срабатывает.
|
|

23.08.2021, 10:55
|
Профессор
|
|
Регистрация: 07.11.2013
Сообщений: 456
|
|
hdma,
Попробуй так:
<a href='?page=definition&word="+encodeURIComponent(n).replace(/'/g,"%27")+"'>"+n+"</a>
|
|

23.08.2021, 12:32
|
Аспирант
|
|
Регистрация: 28.05.2012
Сообщений: 85
|
|
Спасибо, теперь начал видеть кириллицу в начале списка, но по-прежнему не переходит. Кажется дело в том, что ниже есть другая строка, в которой символы кодируются в обратную сторону:
{a=a.replace(/%20/g," ").replace(/%430/g,"а").replace(/%43E/g,"о").replace(/%27/g,"'"),
Вообще говоря, речь о коде из этого приложения, с редким функционалом перехода по любым словам в тексте и поиска с подстановочными знаками, которые позволяют искать слова, правописание которых неизвестно. Там словарь на 200 тысяч слов очень экономно сделан. Если взглянете, тут по ссылке APK-файл, который можно открыть через любой архиватор — https://disk.yandex.ru/d/amhXyapjX_WA4Q, ну или установить на телефон.
|
|

23.08.2021, 13:30
|
 |
Тлен
|
|
Регистрация: 02.01.2010
Сообщений: 6,590
|
|
decodeURIComponent чтоб раскодировать.)
__________________
29375, 35
|
|

23.08.2021, 13:42
|
Аспирант
|
|
Регистрация: 28.05.2012
Сообщений: 85
|
|
А как правильно записать это в строке? Так? —
{a=a.decodeURIComponent(n).replace(/%20/g," ").replace(/%27/g,"'"),
|
|
|
|