Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Web программирование > JavaScript, Ajax
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.08.2021, 03:21   #1
iskander1220
 
Регистрация: 28.06.2017
Сообщений: 7
По умолчанию Причина неподдержки кириллицы в js-коде

Привет. Имеется большой сложный словарный скрипт, который делался для работы с латиницей — но при попытке добавить поддержку кириллицы, он не отрабатывает. То есть, когда в по умолчанию юзер кликает на слово, набранное латиницей - задействуется приведенная ссылка, из которой апострофы и пробелы заменяются на URI-код:

Код:
<a href='?page=definition&word="+n.replace(/'/g,"%27").replace(/ /g,"%20")+"'>"+n+"</a>
Но если точно так же заменять кириллические буквы на код — почему-то код не срабатывает:

Код:
.replace(/а/g,"%430").replace(/о/g,"%43E")
Может кто знает: действителньо ли проблема заключается в этой ссылке, и в ней нужно учесть какие-то особенности при работе с кириллицей — или дело в другом?
iskander1220 вне форума Ответить с цитированием
Старый 23.08.2021, 06:55   #2
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,289
По умолчанию

А нельзя использовать encodeURI(n), чтобы не писать костыли с replace?
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 23.08.2021, 09:24   #3
iskander1220
 
Регистрация: 28.06.2017
Сообщений: 7
По умолчанию

То есть, если напрямую заменять буквы — работать не будет, потому что нужен encodeURI? Сам не смогу его добавить и потестировать, потому спрашиваю.

Интересно, что если перед кириллицей стоит один символ латиницы (например: "fслово") — то переход срабатывает.

Последний раз редактировалось BDA; 24.08.2021 в 02:58.
iskander1220 вне форума Ответить с цитированием
Старый 23.08.2021, 21:55   #4
Streletz
Старожил
 
Регистрация: 03.01.2014
Сообщений: 2,870
По умолчанию

Цитата:
Сообщение от iskander1220 Посмотреть сообщение
То есть, если напрямую заменять буквы — работать не будет, потому что нужен encodeURI?
Напрямую заменять буквы - это изобретение велосипеда. encodeURI сделает то же самое, но это будет значительно проще.
Streletz вне форума Ответить с цитированием
Старый 24.08.2021, 04:47   #5
Desc
Участник клуба
 
Аватар для Desc
 
Регистрация: 21.11.2007
Сообщений: 1,063
По умолчанию

А чтобы было не проще а сложней. Тогда не следует забывать что символ кирилицы занимает 2 байта, а символ латиницы 1 байт.
И если код писался для обработки латиницы то могут быть коллизии по коду в обработке текста.
I am not a wizard, I am just learning.
Desc вне форума Ответить с цитированием
Старый 24.08.2021, 05:02   #6
iskander1220
 
Регистрация: 28.06.2017
Сообщений: 7
По умолчанию

Цитата:
Сообщение от Streletz Посмотреть сообщение
Напрямую заменять буквы - это изобретение велосипеда. encodeURI сделает то же самое, но это будет значительно проще.
Пробовал так, не пошло —

Код:
<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,"'"),
Ее изменил так — с тем же результатом:

Код:
{a=decodeURIComponent(a).replace(/%20/g," ").replace(/%27/g,"'"),
Цитата:
Сообщение от Desc Посмотреть сообщение
А чтобы было не проще а сложней. Тогда не следует забывать что символ кирилицы занимает 2 байта, а символ латиницы 1 байт.
И если код писался для обработки латиницы то могут быть коллизии по коду в обработке текста.
Да, код писался для латиницы — это код из этого приложения, с редким функционалом перехода по любым словам в тексте и поиска с подстановочными знаками, которые позволяют искать слова, правописание которых неизвестно. Там словарь на 200 тысяч слов очень экономно сделан. Если взглянете, тут по ссылке APK-файл, который можно открыть через любой архиватор — https://disk.yandex.ru/d/amhXyapjX_WA4Q
iskander1220 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Причина иероглифоф coNsept Общие вопросы .NET 1 21.02.2012 18:21
в чем причина Arassir PHP 2 04.11.2011 12:56
Множество кириллицы Sauber Помощь студентам 4 02.04.2011 12:17
Причина ошибки cargo29 Работа с сетью в Delphi 4 19.03.2011 19:34
Причина ошибки Wa_sja Паскаль, Turbo Pascal, PascalABC.NET 11 05.09.2010 23:07