| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > PHP: Тексты > проверка на кирилицу |
| Автор: Нурик Сакура 20.3.2006, 14:16 | ||
Нашел в Инете скрипт регистрации, все отлично пашет, кое-что свое подобавлял, но столкнулся с одной проблемой - регистрироваться под русским ником нельзя. А в проекте, который я планирую создать, это просто необходимо. В скрипте есть функция field_validator(), которая проверяет поля на правильность и если все правильно - записывает в БД. Так вот, там есть такой вот код:
Как мне в alpha и производные добавить поддержку кирилицы? Попытался просто добавить "а-яА-Я", но не помогло добавлено позже Сейчас вот подумал, что эта тема может быть немного не по адресу, но уже поздно. Я про БД думал, потому сюда и написал. |
| Автор: CyClon 20.3.2006, 14:55 |
| Добавть в квадратные скобки: А-Яа-я или просто а-Я |
| Автор: Нурик Сакура 20.3.2006, 15:12 | ||||
| Извини, в какие квадратные скобки? в [a-zA-Z]? Я же написал, что пробовал - не помогает. Добавлено @ 15:21 Поправка. Я добавлял "а-яА-Я". Это не помогло. Добавил "а-Я", и у меня скрипт матернулся:
Вот строка 148:
|
| Автор: wsr 20.3.2006, 15:22 |
| Ты уверен, что именно в alpha нужно. попробуй добавить во все поля и посмотри на результат. А вообще, это правильно [a-zA-Zа-яА-Я] |
| Автор: Нурик Сакура 20.3.2006, 15:26 | ||
Да, я уверен, что именно в альфа нужно, потому что передается:
|
| Автор: Ciber SLasH 20.3.2006, 15:49 | ||
Всё работает, вот пример:
|
| Автор: Нурик Сакура 20.3.2006, 16:06 |
| Ciber SLasH, запустил твою строку в отдельном файле в результате вывело просто число 1 и все. |
| Автор: Нурик Сакура 20.3.2006, 16:56 |
| Кстати, если в БД поменять вручную логин на русский - то тоже выдает ошибку, говорит, что логин не правильный. |
| Автор: Ciber SLasH 20.3.2006, 16:58 | ||
Тогда могу посоветовать перевести все файлы в кодировку UTF-8 и тогда будет работать такой код:
|
| Автор: Нурик Сакура 20.3.2006, 17:01 | ||
Не работает. Матерится на 9 строку твоего кода
|
| Автор: wsr 21.3.2006, 22:43 | ||||||
Ну ты уж определись, что у тебя alpha, а что alphanumeric. И добавь во все проверки и помотри, нефига гемороиться.
Выводит 1 потому, что результатом выполнения этой операции будет TRUE или FALSE т.е. если Удовлетворяет регулярке, то TRUE иначе FALSE. Это собственно все в мануале написано. Или выкладывай весь код полностью.! |
| Автор: Ciber SLasH 22.3.2006, 03:14 |
| Это потому, что у тебя исходник не в кодировке UTF-8. Я же написал... сконвертируй все свои скрипты в кодировку UTF-8 и пропиши соответствующий META-тэг. |
| Автор: Ciber SLasH 23.3.2006, 12:06 | ||
Сохранять нужно в кодировке UTF-8 !! |
| Автор: Нурик Сакура 23.3.2006, 14:37 |
| Все, я понял. Я просто не раздуплился, что самому файлу нужно указать кодировку. |
| Автор: Нурик Сакура 23.3.2006, 15:34 | ||||||
| Значит так. Вот что я только что напроверял. Вынес проверку поля в отдельный файл и запустил. Все заработало. А вот в файле регистрации не хочет (оба файла в кодировке ANSI). Вот запрос к функции после нажатия на кнопку "Зарегаться":
Вот ПОЛНЫЙ код всей функции field_validator:
При передаче в поле $_POST["login"] из формы логина "Нурик" выводится сообщение: "Please enter a valid $field_descr." А вот вынесенная в отдельный файл проверка:
Все отлично работает и выводит единицу. |
| Автор: madFobos 20.4.2006, 23:59 | ||
| Вобщем, не мучайся. Самое простое это вместо А-Яа-я использовать \x7F-\xFF, это шестнадцатеричные коды русских букв (хотя я не уверен, что их ereg поддерживате, вот preg_match точно). Другой вариант заключается в том, что все проверки строк основаны на текущей локали, так что выстави setlocalce(LC_ALL, 'rus') //Название локалей надо на хостинге смотреть или хотя бы проверь какая у тебя стоит на сравнение строк с помощью:
|
| Автор: Mal Hack 21.4.2006, 12:36 |
| Модератор: а при чем тут Базы Данных? Что, не может отличить текстовую информацию от БД? Перенесено. |
| Автор: Нурик Сакура 13.1.2007, 11:34 | ||||
| Вобщем, сейчас вот вернулся к этому вопросу. Кажется, у меня получилось найти решение. Во-первых, у меня в php.ini стояло раньше не default_charset = "utf8", а что-то другое, потому русский язык не поддерживался и приходилось писать все на английском. Сейчас поставил и все пашет как надо. Во-вторых, разобрался наконец-то с регуляркой. Теперь можно спокойно делать русский ник и он будет выводиться на экран нормально.
Для тех, кто не заметил разницы, обьясняю. Ввиду того, что логин у меня должен быть только на английском, а имя может содержать и русские символы, мне пришлось продублировать записи в масиве $data_types, указав для русского нужные символы. Проверять после этого стало все успешно регистрировать. Но при выводе из БД выдавало "???" вместо имени. Еще вчера я столкнулся с проблемой кодировки текста от пользователя, потому сделал ф-цию mk_txt (просто для удобства):
И теперь перед каждым вводом и выводом инфы, которая может быть на русском, я юзаю эту ф-цию. Все пашет идеально =) Юзайте, кому нужно, авось поможет. |
| Автор: Mal Hack 13.1.2007, 14:12 | ||
Вот как раз при utf8 русский замечательно поддерживается. Изврат. Надо настроить нормально кодировку БД и установить лоакаль setlocale |
| Автор: Нурик Сакура 13.1.2007, 14:20 |
| Мм.. Ты не понял, у меня стояло НЕ utf8, а что-то другое, я не помню уже что. Я поставил utf8 и все запахало. Что касается кодировки БД, то там стоит utf8_unicode_ci. Но почему-то при вставке русского языка получается фигня какая-то. |
| Автор: Mal Hack 13.1.2007, 14:22 | ||
uft8_general_ci там должно вроде стоять, не помню все их виды... |
| Автор: Нурик Сакура 13.1.2007, 14:33 |
| Сейчас проверю. Добавлено @ 14:42 Посмотрел. Поменял в БД везде кодировку на uft8_general_ci и все заработало без ф-ции mk_txt =) Сейчас еще проверю отправку ПМок, если все работает - то тогда тема точно решена =) |
| Автор: Нурик Сакура 13.1.2007, 15:00 | ||
С ПМками проблема. Вобщем, вот та часть кода, которая отвечает за запись данных в БД:
Через форму передаются данные для записи в БД. В БД почему-то записывается не в таком формате "Íàçàð÷èê", как было записано русское имя персонажа, а вот в таком формате "Ëîëü÷èê". А при выводе получается не русский текст, а вот такая вот "Ïðèâåòèê" канитель |
| Автор: Нурик Сакура 13.1.2007, 15:52 |
| Я уже разобрался, что вся беда в htmlentities(), который русский текст превращает на то, что вставляется в БД. Но без него ведь никак... Или как-то по другому придется фильтровать то, что юзеры передают... |
| Автор: Нурик Сакура 13.1.2007, 16:19 | ||||
| Как ни странно, но мануал мне помог решить проблему =) Поставил вместо просто
вот такой вот вариант
и все заработало. Вобщем, все вопросы решены. |
| Автор: madFobos 15.1.2007, 08:21 | ||
Объясните мне одну вещь. Насколько я знаю проблемы с выводом символов ??? связаны с тем, что phpmysql библиотека использует по умолчанию кодировку latin для коннекта к базе, и с этим настройками кодировки самой базы ничего поделать нельзя. Или кодировка phpmysql зависит от default_charset в php.ini?
|