Преобразование русских символов в верхний регистр

Форум для авторов модов для phpBB 3.0.x. Здесь можно попросить помощи в разработке у коллег.
Правила форума
Местная Конституция | Шаблон запроса | Документация (phpBB3) | Переход на 3.0.6 и выше | FAQ-3 (phpbb3) | Как задавать вопросы | Как устанавливать моды

Ваш вопрос может быть удален без объяснения причин, если на него есть ответы по приведённым ссылкам (а вы рискуете получить предупреждение ;) ).
Афина
phpBB 1.0.0
Сообщения: 6
Стаж: 16 лет 5 месяцев
Благодарил (а): 4 раза

Преобразование русских символов в верхний регистр

Сообщение Афина »

Заранее извиняюсь, если размещаю вопрос не в том разделе, но более подходящего места не нашла.
Пишу дополнение к форуму и столкнулась со странностью. Задача состоит в том, чтобы соеденить между собой 2 таблицы по одному полю. Сложность в том, что набор значений разный. Силами SQL не получается, т.к. теряются строки, которые не встречаются в другой таблице. Я правильно понимаю, что такое в php невозможно? Раньше писала на oracle, там есть такая возможность.
Решила поступить по другому. Получаю 2 отдельные таблицы, упорядоченные по текстовому полю и вывожу их на экран соеденяя в ручную по порядку. (Сразу уточню, что по id упорядочиватьне получается, т.к. пользователям потом будет неудобно.) Но! Когда таблицы упорядочиваются с помощью order by - они упорядочиваются без учета регистра, а года я их сравниваю между собой, чтобы сопоставить строки между собой с помощью strcasecmp, то английские буквы сравниваются нормально, а русские нет, в русском "а" и "А" оказываются разными. Приведение к верхнему регистру с помощью strtoupper тоже эффекта не дает, русские буквы не приводятся.
Заменять все буквы на верхний регистр вручную? Другого пути нет?
Функция будет выполняться очень часто, поэтому хочется, чтобы она выполнялась максимально быстро.
Для лучшего понимания приведу пример:
Есть две таблицы:
1. А
В
Г
2. А
б
Г
С помощью order by они упорядочатся таким образом, как в примере, а когда я их буду сравнивать построчно, то "б" окажется больше "В" и из-за этого не получается нормально поставить в соответствие строчки.
Аватара пользователя
MIT
Former team member
Сообщения: 2500
Стаж: 17 лет 6 месяцев
Откуда: 56°20′02″ с. ш. 36°42′45″ в. д.
Благодарил (а): 3 раза
Поблагодарили: 351 раз

Re: Преобразование русских символов в верхний регистр

Сообщение MIT »

Афина писал(а):чтобы соеденить между собой 2 таблицы по одному полю
JOIN
Афина писал(а):а когда я их буду сравнивать построчно, то "б" окажется больше "В"
collate utf8_general_ci (для Мускуля)

А вообще инфы недостаточно, что бы помочь тебе с написанием правильного запроса.
Афина
phpBB 1.0.0
Сообщения: 6
Стаж: 16 лет 5 месяцев
Благодарил (а): 4 раза

Re: Преобразование русских символов в верхний регистр

Сообщение Афина »

MIT, но ведь с помощью JOIN потеряются строки, у которых нет соответствия в другой таблице? В примере выше строки А=А и Г=Г соеденятся, а строки с б и В потеряются, а мне нужны все строки без потерь. Если нет соответствия в другой таблице, то эти поля должны быть null.
MIT писал(а):collate utf8_general_ci (для Мускуля)
Пока еще не поняла что это такое, но пошла искать инфу в инете. Спасибо.
Аватара пользователя
MIT
Former team member
Сообщения: 2500
Стаж: 17 лет 6 месяцев
Откуда: 56°20′02″ с. ш. 36°42′45″ в. д.
Благодарил (а): 3 раза
Поблагодарили: 351 раз

Re: Преобразование русских символов в верхний регистр

Сообщение MIT »

Афина писал(а):но ведь с помощью JOIN потеряются строки, у которых нет соответствия в другой таблице?
Ничего никуда не потеряется. Прочитай статью по ссылке, там понятно расписано.
Афина
phpBB 1.0.0
Сообщения: 6
Стаж: 16 лет 5 месяцев
Благодарил (а): 4 раза

Re: Преобразование русских символов в верхний регистр

Сообщение Афина »

ссылку не заметила. Спасибо еще раз.

Добавлено спустя 5 минут:
outer join все-таки можно использовать.
Поняла почему не получалось.
Пробовала сделать запрос в phpmyadmin, там outer join не воспринимается. Надо было использовать не в phpmyadmin, а в самой программе, тогда получится.
Спасибо большущее. Это то, что мне нужно.
Извиняюсь за глупые вопросы. У меня только первый проект на php.
Shredder
Former team member
Сообщения: 2266
Стаж: 17 лет 9 месяцев
Благодарил (а): 283 раза
Поблагодарили: 584 раза

Re: Преобразование русских символов в верхний регистр

Сообщение Shredder »

Афина писал(а):английские буквы сравниваются нормально, а русские нет, в русском "а" и "А" оказываются разными. Приведение к верхнему регистру с помощью strtoupper тоже эффекта не дает, русские буквы не приводятся.
http://www.google.ru/search?hl=ru&sourc ... +&gs_rfai=
Аватара пользователя
Nekstati
Поддержка
Поддержка
Сообщения: 3365
Стаж: 17 лет 6 месяцев
Благодарил (а): 37 раз
Поблагодарили: 1454 раза

Re: Преобразование русских символов в верхний регистр

Сообщение Nekstati »

Для русских букв — utf8_strtoupper, utf8_strtolower, utf8_strpos, utf8_str_replace и т. д., см. файл includes/utf/utf_tools.php.
Афина
phpBB 1.0.0
Сообщения: 6
Стаж: 16 лет 5 месяцев
Благодарил (а): 4 раза

Re: Преобразование русских символов в верхний регистр

Сообщение Афина »

Shredder, Nekstati, спасибо большущее

Вернуться в «Для авторов (phpBB 3.0.x)»