Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 23.08.2021, 03:11
Аспирант
Отправить личное сообщение для hdma Посмотреть профиль Найти все сообщения от hdma
 
Регистрация: 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")
Может кто знает: действительно ли проблема заключается в этой ссылке, и в ней нужно учесть какие-то особенности при работе с кириллицей — или дело в другом?
Ответить с цитированием
  #2 (permalink)  
Старый 23.08.2021, 03:46
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,480

Используй на клиенте encodeURIComponent. На сервере соответствующий decode_uri для языка. Не надо делать своих нестандартных костылей.
__________________
29375, 35
Ответить с цитированием
  #3 (permalink)  
Старый 23.08.2021, 03:58
Аспирант
Отправить личное сообщение для hdma Посмотреть профиль Найти все сообщения от hdma
 
Регистрация: 28.05.2012
Сообщений: 85

То есть, если таким образом заменять буквы — работать не будет, потому что нужен encodeURIComponent? Сам не смогу его добавить и потестировать, потому спрашиваю.
Ответить с цитированием
  #4 (permalink)  
Старый 23.08.2021, 04:22
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,480

Может и будет. Всё заисит от кодировки сервера, кодировки js-файла и кодировки html файла. Самые разные сочетания могут породить самые разные варианты кодирования символов и самые разные глюки.
В современном вебе везде используется utf8. Но в utf8 символ "а" кодируется как "%D0%B0", а не как "%430".
encodeURIComponent обеспечивает стандартное кодирование безотносительно, но смысл имеет только если сервер раскодирует также по стандарту.
__________________
29375, 35
Ответить с цитированием
  #5 (permalink)  
Старый 23.08.2021, 05:09
Аспирант
Отправить личное сообщение для hdma Посмотреть профиль Найти все сообщения от hdma
 
Регистрация: 28.05.2012
Сообщений: 85

А имеет значение, если это не сервер, а код приложения? То есть, это в приложении так реализовано, что через ссылку происходит переход к слову. Там тоже utf8, и замена с "%430" на "%D0%B0" изменений не дала.
Ответить с цитированием
  #6 (permalink)  
Старый 23.08.2021, 05:17
Аспирант
Отправить личное сообщение для hdma Посмотреть профиль Найти все сообщения от hdma
 
Регистрация: 28.05.2012
Сообщений: 85

Интересно, что если перед кириллицей стоит один символ латиницы (например: "fслово") — то переход срабатывает.
Ответить с цитированием
  #7 (permalink)  
Старый 23.08.2021, 10:55
Профессор
Отправить личное сообщение для Rise Посмотреть профиль Найти все сообщения от Rise
 
Регистрация: 07.11.2013
Сообщений: 4,662

hdma,
Попробуй так:
<a href='?page=definition&word="+encodeURIComponent(n).replace(/'/g,"%27")+"'>"+n+"</a>
Ответить с цитированием
  #8 (permalink)  
Старый 23.08.2021, 12:32
Аспирант
Отправить личное сообщение для hdma Посмотреть профиль Найти все сообщения от hdma
 
Регистрация: 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, ну или установить на телефон.
Ответить с цитированием
  #9 (permalink)  
Старый 23.08.2021, 13:30
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,480

decodeURIComponent чтоб раскодировать.)
__________________
29375, 35
Ответить с цитированием
  #10 (permalink)  
Старый 23.08.2021, 13:42
Аспирант
Отправить личное сообщение для hdma Посмотреть профиль Найти все сообщения от hdma
 
Регистрация: 28.05.2012
Сообщений: 85

А как правильно записать это в строке? Так? —
{a=a.decodeURIComponent(n).replace(/%20/g," ").replace(/%27/g,"'"),
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не получается вставить код js в HTML garmoni Элементы интерфейса 3 05.09.2013 05:56
ошибка в js коде timotheus Элементы интерфейса 3 23.05.2012 09:02
Картинка обрабатывается js 4yBaK Общие вопросы Javascript 10 11.09.2011 09:28
Ошибка в коде Js, Неправильно работает скрипт. Julia Panatova Общие вопросы Javascript 1 19.01.2011 14:12
Ошибка в коде Js, Неправильно работает скрипт. Julia Panatova Общие вопросы Javascript 7 07.01.2011 13:41