Эту инструкцию я указал еще до создания вопроса, поэтому дело не в ней.
Если ее не указать, браузер на нее пожалуется, поэтому я ее сразу поставил.
Т.е. ее наличие почему-то не помогает. Может нужно еще какой-то код написать на 2-ом сайте?
Или проблема только в коде на 1-ом сайте? Но тогда какой он должен быть, кажется, что уже все способы перепробовал.
Задача в том, чтобы сделать замену латинских символов на кириллические, с сохранением регистра.
При этом количество правил настолько большое, что это трудно реализовать, если прописывать каждый регистр.
Например, есть правила:
C = Ц
Ci = Чи
Cia = Чья
Ciaa = Чиа
Стоит ввести CiAa и все рушится. Таких правил тысяча. Одно 5-буквенное правило, чтобы прописать для него регистр займет около тысячи строк.
Некоторые правила можно упростить через замену по регулярному выражению, но и там есть проблема:
Например, как мне заменить с сохранением регистра следующие строки?
$text = preg_replace('/(A)(cia|cie|cio|ciu|ci|sia|sie|sio|siu|si)/iu', 'Ок$2', $text);
$text = preg_replace('/(a)(cia|cie|cio|ciu|ci|sia|sie|sio|siu|si)/iu', 'ок$2', $text);
Если я применю это на текст:
Acia acia
То результат будет:
Окcia Окcia [оба с большой]
Если я отменю регистронезависимость, убрав флаг i, то мне придется прописывать каждый трехбуквенный вариант 8 раз, семибуквенный - 128 раз, а таких вариантов много.
Вот и получается, что есть две проблемы:
1. Решить задачу простым способом через замену латинских символов на кириллические, с сохранением регистра при таком переносе похоже невозможно.
2. Решить задачу можно огромным количеством правил, но даже при попытках их сократить, даже регулярные выражения не помогают :)
Mazino, неудачный пример, т.к. одна буква использовалась.
Задача выглядит так, чтобы это работало с символами внутри слова.
'deRe' => 'деРе' (при этом нельзя решить это через односимвольную автозамену, поскольку r = ръ, de = дэ и т.д.)
"Вы так же можете генерировать динамическую регулярку прямо в цикле обхода. сгенерировать список кандидатов на замену с предложенным вариантом для премодерации. Можно даже сделать интерактивную замену для спорных случаев." - можно поподробнее, как это сделать?)
AUser0, Вы понимаете разницу между источником и целью?
preg_replace() с флагом /i будет регистронезависимым для замены источника, но цель у Вас меняться не будет.
Пример:
'pier' => 'пьер'
'PiEr' => 'пьер', но не 'ПьЕр'.
Adamos, Вы судите объем по примеру? В моем случае все это "не сосчитать" займет как минимум несколько миллионов строк.
Одно правило с буквой "J" + каждой гласной (и да, по-отдельности их нельзя было заменить) заняло 110 строк.
Правило из 5 букв займет около 10 000 строк. Представьте, что таких правил 1 000.
А теперь представьте 10 000 правил, на регистры каждого из которых по 10 000 строк.
Двойная замена невозможна.
Тут идет перевод. Т.е. из латинским символов в русские. После первой операции, уже латинских символов не будет, то есть нечего будет заменять уже, поэтому результат двух строк будет = результату первой строки.
Моя цель: сделать автозамену латинских сочетаний символов на русские с сохранением регистра в русском языке такого же, как он был в латинском.
Такие правила я уже давно прописал. Сейчас я хочу решить проблему с регистром.
Чтобы было так:
dienier = тьенэ
Dienier = Тьенэ
dieNier = тьеНэ
dienIer = тьенЭ
dieNiEr = тьеНэ
и т.д.
Дмитрий, все неимоверное количество вариантов? пожалуйста, прочтите, что я написал выше, речь идет о тысячах сочетаний. Даже если это трехбуквенные сочетания, то количество строк получится слишком большим.
Дмитрий, я в курсе, что замена идет слева направо. Но речь ведь не об этом.
Я же даже пример приложил. Можете скопировать - проверить, разный регистр получится.
Может быть Вы путаетесь из-за количества букв "o"? Приведу пример иначе: