• This site uses cookies. By continuing to use this site, you are agreeing to our use of cookies. Learn more.

RESOLVED UNICODE Character Codes

Alexey

New member
Messages
3
Likes
0
Points
1
#1
Доброго дня!
Я использую Clearfy, вопрос по транслитерации...
Транслитерация хорошо работает с символами UNICODE (посимвольно), подскажите возможна ли обработка кодов нестандартных символов?
Или делать замену не по каждому символу (посимвольно), а по группе символов.

Объясню на примере:
Символ Фунта (U+00A37)
Если в WordPress непосредственно в Записи в заголовке указать САМ СИМВОЛ (одним символом) - то ваш плагин правильно понимает и проводит транслитерацию URL (точнее удалит позицию этого символа - так и должно быть, а, например, символы испанского языка правильно заменяться на английские аналоги).
Но WordPress не любит прямого употребления UNICODE символов в "лоб" и при любой возможности пытается конвертировать их в соответствующий код. Таким образом если создание заголовка проходило с участием плагина и WordPress, а не "руками" - символ будет заменён (как это происходит я не выяснил, но не в этом суть вопроса) на "ć" или "£". Поэтому в URL попадет "263" или pound...
Теперь сам вопрос))
Можно ли вашим плагином проводить замену (транслитерацию) не единичного символа а "строки"? И делать "пустые" соответствия?
В данном случае заменяем на "ничего", т.е. "ć=" и "£=".
По вашему замыслу указать в настройках (пример):
"ć=,£=" и т.д.

P.S. Если такое возможно, то вероятно можно таким же образом составлять некий словарь замен.
Чтобы, например, "Пунта Кана" (курорт такой) заменялся на "Punta Cana", а не "Punta Kana", т.е. указать Кана=Cana.

Заранее спасибо!
 

alexkovalev

Program developer
Staff member
Messages
267
Likes
19
Points
18
#2
Здравствуйте,

Вы можете делать любые шаблоны замены в интерфейсе плагина: Cana=сana, но вы не можете заменить символ на пустоту Cana=, к сожалению в текущей реализации плагина, это приведет пропуску вашего шаблона замены.

Если вы немного можете работать с php кодом, хотя бы вставить его на своем сайте. Вы можете использовать фильтр:

PHP:
// Пример фильтрации шаблонов на php
// 5.3 и выше, вставить можно в functions.php или можно использовать плагин php сниппетов.
add_filter( 'wbcr_cyrlitera_default_symbols_pack', function($symbols){

    $symbols['Љи'] = 'Lji';
    $symbols[' '] = '';
    $symbols['ć'] = '';

    return $symbols;
});
С уважением, Алекс
 

Alexey

New member
Messages
3
Likes
0
Points
1
#3
Спасибо за ваш быстрый ответ!
Получается все мои вопросы/пожелания прекрасно и просто решаются!!!
Можно сказать - Я счастлив))
Да я так и сделаю!
Воспользуюсь фильтром.
Спасибо за хороший и удобный плагин!
 

Alexey

New member
Messages
3
Likes
0
Points
1
#4
Еще подскажите пожалуйста, а каким образом обрабатываются "пересечения"?
Ведь уже заранее есть соответствия одиночным символам.
т.е. если создать шаблон "Кан=Can", то какой будет результат для "Пунта-Кана"?
А для "Каньён"? Эти строки не будут разбираться на одиночные символы, как работает плагин по умолчанию?
По ReGex получается как минимум два совпадения: три символа одновременно и каждый символ по отдельности...
А если создавать "словарь", то совпадений/пересечений может возникать еще большее количество.
Какое из них будет выбрано для транслитерации?
В логике ReGex выражения поиска/замены следуют друг за другом по очереди, первое выполнилось и произвело замену, тогда остальные уже не "смогут" найти это соответствие... У вас таким же образом организовано преобразование?
Если да, то какой порядок у фильтров? Что будет применено первым, пятым и т.д.
Можно ли использовать правила ReGex PCRE? Или нужно прямое указание символов?
Для более точной фильтрации может ли "шаблон поиска" содержать пробелы? Т.е. чтобы быть уверенным, что это именно то слово, а не часть другого... А соответственно использовать ReGex с просмотром вперед и назад, чтоб проверять пробелы, но не захватывать их и заменять в последнюю очередь, когда слова уже все разобраны по фильтрам.
В предложенном вами фильтре PHP (это догадка лишь) левая часть (то что ищем) - может быть ReGex?
А правая часть - на то что заменяем?

Еще раз заранее спасибо!
 

alexkovalev

Program developer
Staff member
Messages
267
Likes
19
Points
18
#5
Еще подскажите пожалуйста, а каким образом обрабатываются "пересечения"?
Ведь уже заранее есть соответствия одиночным символам.
т.е. если создать шаблон "Кан=Can", то какой будет результат для "Пунта-Кана"?
А для "Каньён"? Эти строки не будут разбираться на одиночные символы, как работает плагин по умолчанию?
Есть у вас строка "Привет мир, как дела?":
Я использую такие правила замены:
Code:
Привет=Здавствуйте,мир=народ
В итоге, после транслитерации вы должны получить такую строку:
Code:
Здавствуйте народ, kak dela?
То есть ваш шаблон не будет конвертирован. Все остальные символы и части строки, которые не попадают под ваши шаблоны будут заменены посимвольно.
Все объяснения, как происходит замена можно почитать тут PHP: strtr - Manual
1567769223245.png


Регулярные выражения вы не можете использовать, потому что php функция (которая используется для замены) их не поддерживает.

В моем примере из предыдущего ответа, слева это какую часть строки заменить, справа на что заменить. Приоритет всегда у шаблона с большим числом символов. К например в описании выше. Сначала будет замена Hello и только потом Hi, но результат замены не будет уже участвовать в поиске и замене.
 
Last edited: