Модераторы: Aliance, skyboy, MoLeX, ksnk

Поиск:

Закрытая темаСоздание новой темы Создание опроса
> проверка на кирилицу 
V
    Опции темы
Нурик Сакура
Дата 20.3.2006, 14:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Почти японец...
*


Профиль
Группа: Участник
Сообщений: 213
Регистрация: 17.12.2004
Где: Украина, Киев

Репутация: нет
Всего: 2



Нашел в Инете скрипт регистрации, все отлично пашет, кое-что свое подобавлял, но столкнулся с одной проблемой - регистрироваться под русским ником нельзя. А в проекте, который я планирую создать, это просто необходимо. В скрипте есть функция field_validator(), которая проверяет поля на правильность и если все правильно - записывает в БД. Так вот, там есть такой вот код:

Код

$data_types=array(
            "email"=>$email_regexp,
            "digit"=>"^[0-9]$",
            "number"=>"^[0-9]+$",
            "alpha"=>"^[a-zA-Z]+$",
            "alpha_space"=>"^[a-zA-Z ]+$",
            "alphanumeric"=>"^[a-zA-Z0-9]+$",
            "alphanumeric_space"=>"^[a-zA-Z0-9 ]+$",
            "string"=>""
         );

Как мне в alpha и производные добавить поддержку кирилицы? Попытался просто добавить "а-яА-Я", но не помогло smile . Я в этом деле полный Незнайка, потому обращаюсь к вам. Если тема уже была - прошу меня извинить, я не нашел. Или просто не понял, что именно те темы мне нужны.

добавлено позже
Сейчас вот подумал, что эта тема может быть немного не по адресу, но уже поздно. Я про БД думал, потому сюда и написал.

Это сообщение отредактировал(а) Nurik - 20.3.2006, 16:30
--------------------
- Приказы не обсуждаются!- Не объясняются и не выполняются. (с) фанфик на Hellsing
PM MAIL   Вверх
CyClon
Дата 20.3.2006, 14:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 838
Регистрация: 3.12.2005

Репутация: 1
Всего: 4



Добавть в квадратные скобки:

А-Яа-я

или просто

а-Я


--------------------
user posted image
PM   Вверх
Нурик Сакура
Дата 20.3.2006, 15:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Почти японец...
*


Профиль
Группа: Участник
Сообщений: 213
Регистрация: 17.12.2004
Где: Украина, Киев

Репутация: нет
Всего: 2



Цитата(CyClon @ 20.3.2006, 14:55 Найти цитируемый пост)
Добавть в квадратные скобки:

А-Яа-я

или просто

а-Я

Извини, в какие квадратные скобки? в [a-zA-Z]? Я же написал, что пробовал - не помогает.
Добавлено @ 15:21
Поправка. Я добавлял "а-яА-Я". Это не помогло. Добавил "а-Я", и у меня скрипт матернулся:
Код

Warning: ereg() [function.ereg]: REG_ERANGE in W:\www\game\auth\functions.php on line 148

Вот строка 148:
Код

$field_ok = ereg($data_types[$field_type], $field_data);

--------------------
- Приказы не обсуждаются!- Не объясняются и не выполняются. (с) фанфик на Hellsing
PM MAIL   Вверх
wsr
Дата 20.3.2006, 15:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Fuzzy Logic
*


Профиль
Группа: Участник
Сообщений: 142
Регистрация: 3.7.2005

Репутация: нет
Всего: 2



Ты уверен, что именно в alpha нужно. попробуй добавить во все поля и посмотри на результат. А вообще, это правильно [a-zA-Zа-яА-Я]
--------------------
 ICQ : 918-318Сайт : Lock-Team 
PM MAIL WWW ICQ   Вверх
Нурик Сакура
Дата 20.3.2006, 15:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Почти японец...
*


Профиль
Группа: Участник
Сообщений: 213
Регистрация: 17.12.2004
Где: Украина, Киев

Репутация: нет
Всего: 2



Да, я уверен, что именно в альфа нужно, потому что передается:
Код

field_validator("login name", $_POST["login"], "alphanumeric", 4, 15);

--------------------
- Приказы не обсуждаются!- Не объясняются и не выполняются. (с) фанфик на Hellsing
PM MAIL   Вверх
Ciber SLasH
Дата 20.3.2006, 15:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1813
Регистрация: 9.11.2004
Где: С.-Петербург

Репутация: нет
Всего: 67



Всё работает, вот пример:
Код

echo ereg("^[a-zA-Zа-яА-Я0-9 _]+$", "Мега 1_2 ник");

PM   Вверх
Нурик Сакура
Дата 20.3.2006, 16:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Почти японец...
*


Профиль
Группа: Участник
Сообщений: 213
Регистрация: 17.12.2004
Где: Украина, Киев

Репутация: нет
Всего: 2



Ciber SLasH, запустил твою строку в отдельном файле в результате вывело просто число 1 и все.
--------------------
- Приказы не обсуждаются!- Не объясняются и не выполняются. (с) фанфик на Hellsing
PM MAIL   Вверх
Нурик Сакура
Дата 20.3.2006, 16:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Почти японец...
*


Профиль
Группа: Участник
Сообщений: 213
Регистрация: 17.12.2004
Где: Украина, Киев

Репутация: нет
Всего: 2



Кстати, если в БД поменять вручную логин на русский - то тоже выдает ошибку, говорит, что логин не правильный.
--------------------
- Приказы не обсуждаются!- Не объясняются и не выполняются. (с) фанфик на Hellsing
PM MAIL   Вверх
Ciber SLasH
Дата 20.3.2006, 16:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1813
Регистрация: 9.11.2004
Где: С.-Петербург

Репутация: нет
Всего: 67



Тогда могу посоветовать перевести все файлы в кодировку UTF-8 и тогда будет работать такой код:
Код

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content='text/html; charset=utf-8'>
</head>

<body>
<?php echo preg_match("/^[a-zA-Zа-яА-Я0-9 _]+$/u", "Меганик"); ?>
</body>
</html>

PM   Вверх
Нурик Сакура
Дата 20.3.2006, 17:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Почти японец...
*


Профиль
Группа: Участник
Сообщений: 213
Регистрация: 17.12.2004
Где: Украина, Киев

Репутация: нет
Всего: 2



Не работает. Матерится на 9 строку твоего кода
Код

Warning: preg_match() [function.preg-match]: Compilation failed: invalid UTF-8 string at offset 9 in W:\www\game\auth\nur.php on line 9

--------------------
- Приказы не обсуждаются!- Не объясняются и не выполняются. (с) фанфик на Hellsing
PM MAIL   Вверх
wsr
Дата 21.3.2006, 22:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Fuzzy Logic
*


Профиль
Группа: Участник
Сообщений: 142
Регистрация: 3.7.2005

Репутация: нет
Всего: 2



Цитата(Nurik @ 20.3.2006, 15:26)
Да, я уверен, что именно в альфа нужно, потому что передается:
Код

field_validator("login name", $_POST["login"], "alphanumeric", 4, 15);

Ну ты уж определись, что у тебя alpha, а что alphanumeric. И добавь во все проверки и помотри, нефига гемороиться.

Код

echo ereg("^[a-zA-Zа-яА-Я0-9 _]+$", "Мега 1_2 ник");

Выводит 1 потому, что результатом выполнения этой операции будет TRUE или FALSE т.е. если Удовлетворяет регулярке, то TRUE иначе FALSE. Это собственно все в мануале написано.

Или выкладывай весь код полностью.!
--------------------
 ICQ : 918-318Сайт : Lock-Team 
PM MAIL WWW ICQ   Вверх
Ciber SLasH
Дата 22.3.2006, 03:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1813
Регистрация: 9.11.2004
Где: С.-Петербург

Репутация: нет
Всего: 67



Цитата(Nurik @ 20.3.2006, 17:01 Найти цитируемый пост)
Не работает. Матерится на 9 строку твоего кода

Это потому, что у тебя исходник не в кодировке UTF-8. Я же написал... сконвертируй все свои скрипты в кодировку UTF-8 и пропиши соответствующий META-тэг.
PM   Вверх
Нурик Сакура
Дата 22.3.2006, 18:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Почти японец...
*


Профиль
Группа: Участник
Сообщений: 213
Регистрация: 17.12.2004
Где: Украина, Киев

Репутация: нет
Всего: 2



Цитата(wsr @ 21.3.2006, 22:43 Найти цитируемый пост)
Ну ты уж определись, что у тебя alpha, а что alphanumeric. И добавь во все проверки и помотри, нефига гемороиться.

Я во все добавлял. Если ты не заметил чуток выше я писал про alpha и производные.

Цитата(wsr @ 21.3.2006, 22:43 Найти цитируемый пост)
Выводит 1 потому, что результатом выполнения этой операции будет TRUE или FALSE т.е. если Удовлетворяет регулярке, то TRUE иначе FALSE. Это собственно все в мануале написано.

Извини, я с регулярными выражениями никогда еще не работал. Почитал сейчас мануал, буду пытаться разобраться.

Цитата(Ciber SLasH @ 22.3.2006, 03:14 Найти цитируемый пост)
Это потому, что у тебя исходник не в кодировке UTF-8. Я же написал... сконвертируй все свои скрипты в кодировку UTF-8 и пропиши соответствующий META-тэг.

Я скопировал твой код, вставил в отдельный файл, сохранил, запустил в браузере. Выдало ошибку с матами на 9 строку. Где еще ему мета-тег прописать?
--------------------
- Приказы не обсуждаются!- Не объясняются и не выполняются. (с) фанфик на Hellsing
PM MAIL   Вверх
Ciber SLasH
Дата 23.3.2006, 12:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1813
Регистрация: 9.11.2004
Где: С.-Петербург

Репутация: нет
Всего: 67



Цитата(Nurik @ 22.3.2006, 18:00 Найти цитируемый пост)
Я скопировал твой код, вставил в отдельный файл, сохранил, запустил в браузере

Сохранять нужно в кодировке UTF-8 !!
PM   Вверх
Нурик Сакура
Дата 23.3.2006, 14:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Почти японец...
*


Профиль
Группа: Участник
Сообщений: 213
Регистрация: 17.12.2004
Где: Украина, Киев

Репутация: нет
Всего: 2



Все, я понял. Я просто не раздуплился, что самому файлу нужно указать кодировку.
--------------------
- Приказы не обсуждаются!- Не объясняются и не выполняются. (с) фанфик на Hellsing
PM MAIL   Вверх
Нурик Сакура
Дата 23.3.2006, 15:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Почти японец...
*


Профиль
Группа: Участник
Сообщений: 213
Регистрация: 17.12.2004
Где: Украина, Киев

Репутация: нет
Всего: 2



Значит так. Вот что я только что напроверял. Вынес проверку поля в отдельный файл и запустил. Все заработало. А вот в файле регистрации не хочет (оба файла в кодировке ANSI).

Вот запрос к функции после нажатия на кнопку "Зарегаться":
Код

field_validator("login name", $_POST["login"], "alphanumeric", 4, 15);


Вот ПОЛНЫЙ код всей функции field_validator:
Код

function field_validator($field_descr, $field_data, $field_type, $min_length="", $max_length="", $field_required=1)
{
    global $messages;

    if(!$field_data && !$field_required)
    {
        return;
    }

    $field_ok=false;

    $email_regexp="^([a-zA-Z0-9_\-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|";
    $email_regexp.="(([a-zA-Z0-9\-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$";

    $data_types=array(
                        "email"=>$email_regexp,
                        "digit"=>"^[0-9]$",
                        "number"=>"^[0-9]+$",
                        "alpha"=>"^[a-zA-Zа-яА-Я]+$",
                        "alpha_space"=>"^[a-zA-Zа-яА-Я ]+$",
                        "alphanumeric"=>"^[a-zA-Zа-яА-Я0-9]+$",
                        "alphanumeric_space"=>"^[a-zA-Zа-яА-Я0-9 ]+$",
                        "string"=>""
                     );

    if ($field_required && empty($field_data))
    {
        $messages[] = "$field_descr is a required field.";
        return;
    }

    if ($field_type == "string")
    {
        $field_ok = true;
    }
    else
    {
        $field_ok = ereg($data_types[$field_type], $field_data);
    }

    if (!$field_ok)
    {
        $messages[] = "Please enter a valid $field_descr.";
        return;
    }

    if ($field_ok && $min_length)
    {
        if (strlen($field_data) < $min_length)
        {
            $messages[] = "$field_descr is invalid, it should be at least $min_length character(s).";
            return;
        }
    }

    if ($field_ok && $max_length)
    {
        if (strlen($field_data) > $max_length)
        {
            $messages[] = "$field_descr is invalid, it should be less than $max_length characters.";
            return;
        }
    }
}


При передаче в поле $_POST["login"] из формы логина "Нурик" выводится сообщение: "Please enter a valid $field_descr." А вот вынесенная в отдельный файл проверка:
Код

<?php
$field_ok=false;
$field_data = "Нурик";
$field_type = "alphanumeric";

$data_types=array(
            "email"=>$email_regexp,
            "digit"=>"^[0-9]$",
            "number"=>"^[0-9]+$",
            "alpha"=>"^[a-zA-Zа-яА-Я]+$",
            "alpha_space"=>"^[a-zA-Zа-яА-Я ]+$",
            "alphanumeric"=>"^[a-zA-Zа-яА-Я0-9]+$",
            "alphanumeric_space"=>"^[a-zA-Zа-яА-Я0-9 ]+$",
            "string"=>""
         );

$field_ok = ereg($data_types[$field_type], $field_data);

if ($field_type == "string")
{
    $field_ok = true;
}
else
{
    $field_ok = ereg($data_types[$field_type], $field_data);
}

print $field_ok;
?>


Все отлично работает и выводит единицу.

Это сообщение отредактировал(а) Nurik - 23.3.2006, 15:35
--------------------
- Приказы не обсуждаются!- Не объясняются и не выполняются. (с) фанфик на Hellsing
PM MAIL   Вверх
madFobos
Дата 20.4.2006, 23:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 102
Регистрация: 7.12.2005

Репутация: нет
Всего: 3



Вобщем, не мучайся. Самое простое это вместо А-Яа-я использовать \x7F-\xFF, это шестнадцатеричные коды русских букв (хотя я не уверен, что их ereg поддерживате, вот preg_match точно).

Другой вариант заключается в том, что все проверки строк основаны на текущей локали, так что выстави
setlocalce(LC_ALL, 'rus') //Название локалей надо на хостинге смотреть
или хотя бы проверь какая у тебя стоит на сравнение строк с помощью:
Код

echo setlocale(LC_COLLATE, 0);
 
PM MAIL   Вверх
Mal Hack
Дата 21.4.2006, 12:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 16
Всего: 261



Модератор: а при чем тут Базы Данных? Что, не может отличить текстовую информацию от БД? Перенесено. 
PM ICQ   Вверх
Нурик Сакура
Дата 13.1.2007, 11:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Почти японец...
*


Профиль
Группа: Участник
Сообщений: 213
Регистрация: 17.12.2004
Где: Украина, Киев

Репутация: нет
Всего: 2



Вобщем, сейчас вот вернулся к этому вопросу. Кажется, у меня получилось найти решение.

Во-первых, у меня в php.ini стояло раньше не default_charset = "utf8", а что-то другое, потому русский язык не поддерживался и приходилось писать все на английском. Сейчас поставил и все пашет как надо.

Во-вторых, разобрался наконец-то с регуляркой. Теперь можно спокойно делать русский ник и он будет выводиться на экран нормально.

Код

function field_validator($field_descr, $field_data, $field_type, $min_length, $max_length, $field_required=1)
{
    global $messages;
    global $lang;

    if(!$field_data && !$field_required)
    {
        return;
    }

    $field_ok=false;

    $email_regexp="^([a-zA-Z0-9_\.\-]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|";
    $email_regexp.="(([a-zA-Z0-9\-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$";

    $data_types=array(
                        "email"=>$email_regexp,
                        "digit"=>"^[0-9]$",
                        "number"=>"^[0-9]+$",
                        "alpha"=>"^[a-zA-Z]+$",
                        "alpha_space"=>"^[a-zA-Z ]+$",
                        "alphanumeric"=>"^[a-zA-Z0-9_\-]+$",
                        "alphanumeric_space"=>"^[a-zA-Z0-9_ \-]+$",
                        "alpha_ru"=>"^[a-zA-Zа-яА-Я]+$",
                        "alpha_space_ru"=>"^[a-zA-Zа-яА-Я ]+$",
                        "alphanumeric_ru"=>"^[a-zA-Zа-яА-Я0-9_\-]+$",
                        "alphanumeric_space_ru"=>"^[a-zA-Zа-яА-Я0-9_ \-]+$",
                        "string"=>""
                     );

    if ($field_required && empty($field_data))
    {
        $messages[] = "<b>".$field_descr."</b> " . $lang['err_is_required'];
        return;
    }

    if ($field_type == "string")
    {
        $field_ok = true;
    }
    else
    {
        $field_ok = ereg($data_types[$field_type], $field_data);
    }

    if (!$field_ok)
    {
        $messages[] = $lang['err_invalid_data_begin'] . $field_descr . $lang['err_invalid_data_end'];
        return;
    }

    if ($field_ok && $min_length)
    {
        if (strlen($field_data) < $min_length)
        {
            $messages[] = "<b>".$field_descr."</b>" . $lang['err_min_length_begin'] . $min_length . $lang['err_length_end'];
            return;
        }
    }

    if ($field_ok && $max_length)
    {
        if (strlen($field_data) > $max_length)
        {
            $messages[] = "<b>".$field_descr."</b>" . $lang['err_max_length_begin'] . $max_length . $lang['err_length_end'];
            return;
        }
    }
}

Для тех, кто не заметил разницы, обьясняю. Ввиду того, что логин у меня должен быть только на английском, а имя может содержать и русские символы, мне пришлось продублировать записи в масиве $data_types, указав для русского нужные символы.

Проверять после этого стало все успешно регистрировать. Но при выводе из БД выдавало "???" вместо имени. Еще вчера я столкнулся с проблемой кодировки текста от пользователя, потому сделал ф-цию mk_txt (просто для удобства):
Код

function mk_txt($act, $txt)
{
    switch($act)
    {
        case "enc":
            $text = utf8_encode($txt);
            break;
        case "dec":
            $text = utf8_decode($txt);
            break;
    }
    return $text;
}

И теперь перед каждым вводом и выводом инфы, которая может быть на русском, я юзаю эту ф-цию. Все пашет идеально =) Юзайте, кому нужно, авось поможет. smile 
--------------------
- Приказы не обсуждаются!- Не объясняются и не выполняются. (с) фанфик на Hellsing
PM MAIL   Вверх
Mal Hack
Дата 13.1.2007, 14:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 16
Всего: 261



Цитата(Нурик Сакура @  13.1.2007,  11:34 Найти цитируемый пост)
Во-первых, у меня в php.ini стояло раньше не default_charset = "utf8", а что-то другое, потому русский язык не поддерживался и приходилось писать все на английском. Сейчас поставил и все пашет как надо.

Вот как раз при utf8 русский замечательно поддерживается.

Изврат. Надо настроить нормально кодировку БД и установить лоакаль setlocale
PM ICQ   Вверх
Нурик Сакура
Дата 13.1.2007, 14:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Почти японец...
*


Профиль
Группа: Участник
Сообщений: 213
Регистрация: 17.12.2004
Где: Украина, Киев

Репутация: нет
Всего: 2



Мм.. Ты не понял, у меня стояло НЕ utf8, а что-то другое, я не помню уже что. Я поставил utf8 и все запахало. Что касается кодировки БД, то там стоит utf8_unicode_ci. Но почему-то при вставке русского языка получается фигня какая-то.
--------------------
- Приказы не обсуждаются!- Не объясняются и не выполняются. (с) фанфик на Hellsing
PM MAIL   Вверх
Mal Hack
Дата 13.1.2007, 14:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 16
Всего: 261



Цитата(Нурик Сакура @  13.1.2007,  14:20 Найти цитируемый пост)
Но почему-то при вставке русского языка получается фигня какая-то. 

uft8_general_ci там должно вроде стоять, не помню все их виды...
PM ICQ   Вверх
Нурик Сакура
Дата 13.1.2007, 14:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Почти японец...
*


Профиль
Группа: Участник
Сообщений: 213
Регистрация: 17.12.2004
Где: Украина, Киев

Репутация: нет
Всего: 2



Сейчас проверю.

Добавлено @ 14:42 
Посмотрел. Поменял в БД везде кодировку на uft8_general_ci и все заработало без ф-ции mk_txt =)
Сейчас еще проверю отправку ПМок, если все работает - то тогда тема точно решена =)
--------------------
- Приказы не обсуждаются!- Не объясняются и не выполняются. (с) фанфик на Hellsing
PM MAIL   Вверх
Нурик Сакура
Дата 13.1.2007, 15:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Почти японец...
*


Профиль
Группа: Участник
Сообщений: 213
Регистрация: 17.12.2004
Где: Украина, Киев

Репутация: нет
Всего: 2



С ПМками проблема. Вобщем, вот та часть кода, которая отвечает за запись данных в БД:
Код

if($action == compose2)
{
    field_validator($lang['recipient_field'], $_POST['to'], "alphanumeric_space_ru", 3, 16);
    field_validator($lang['subject_field'], $_POST['subject'], "string", 1, 50);
    field_validator($lang['message_field'], $_POST['message'], "string", 1, 5000);

    $recipient = $_POST['to'];
    $msg = $_POST['message'];

    if($recipient == $char_name)
    {
        $messages[] = $lang['err_selfsending'];
    }

    $tools->checkCharExistance($recipient);
    if($tools->char_check_result == 1)
    {
        $tools->getCharAccID($recipient);
        $recipient_id = $tools->char_acc_id;
    }
    else
    {
        $messages[] = $lang['err_wrong_recipient'];
    }

    if(empty($msg))
    {
        $messages[] = $lang['err_empty_message'];
    }

    if(empty($messages))
    {
        $sentdate = date("U");

        $msg_subject = $_POST['subject'];
        $msg_subject = htmlentities($msg_subject);
        $msg_text = $_POST['message'];
        $msg_text = nl2br(htmlentities($msg_text));

        $dbconn->connect();
        $query = "insert into mailbox (msg_sender, msg_recipient, msg_subject, msg_body, msg_status, msg_sentdate) values ('".$acc_id."', '".$recipient_id."', '".$msg_subject."', '".$msg_text."', 'unread', '".$sentdate."')";
        if(!($result = mysql_query($query, $dbconn->link)))
        {
            print("Unnable to work with <b>mailbox!</b><br>\n" .
                  "MySQL tells: " . mysql_error() . "<br>\n");
            exit;
        }
        $dbconn->disconnect($dbconn->link);
        print("<center>\n" .
              "    ".$lang['mailbox_sent_msg']."<br>\n".
              "    <a href=\"".$_SERVER['PHP_SELF']."?action=inbox\">".$lang['mailbox_return_inbox']."</a>\n" .
              "</center>\n");
    }
    else
    {
        print("<font color=red><br>\n");
        foreach($messages as $err_msg) print "\t".$err_msg."<br>\n";
        print("</font><br>\n");
        newPMform($recipient, $subject, "");
    }
}


Через форму передаются данные для записи в БД. В БД почему-то записывается не в таком формате "Íàçàð÷èê", как было записано русское имя персонажа, а вот в таком формате "&Euml;&icirc;&euml;&uuml;&divide;&egrave;&ecirc;". А при выводе получается не русский текст, а вот такая вот "Ïðèâåòèê" канитель  smile 

Это сообщение отредактировал(а) Нурик Сакура - 13.1.2007, 15:01
--------------------
- Приказы не обсуждаются!- Не объясняются и не выполняются. (с) фанфик на Hellsing
PM MAIL   Вверх
Нурик Сакура
Дата 13.1.2007, 15:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Почти японец...
*


Профиль
Группа: Участник
Сообщений: 213
Регистрация: 17.12.2004
Где: Украина, Киев

Репутация: нет
Всего: 2



Я уже разобрался, что вся беда в htmlentities(), который русский текст превращает на то, что вставляется в БД. Но без него ведь никак... Или как-то по другому придется фильтровать то, что юзеры передают...
--------------------
- Приказы не обсуждаются!- Не объясняются и не выполняются. (с) фанфик на Hellsing
PM MAIL   Вверх
Нурик Сакура
Дата 13.1.2007, 16:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Почти японец...
*


Профиль
Группа: Участник
Сообщений: 213
Регистрация: 17.12.2004
Где: Украина, Киев

Репутация: нет
Всего: 2



Как ни странно, но мануал мне помог решить проблему =)
Поставил вместо просто
Код

htmlentities($msg_subject);

вот такой вот вариант
Код

htmlentities($msg_subject, 0, "utf-8");

и все заработало. Вобщем, все вопросы решены.
--------------------
- Приказы не обсуждаются!- Не объясняются и не выполняются. (с) фанфик на Hellsing
PM MAIL   Вверх
madFobos
Дата 15.1.2007, 08:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 102
Регистрация: 7.12.2005

Репутация: нет
Всего: 3



Объясните мне одну вещь. Насколько я знаю проблемы с выводом символов ??? связаны с тем, что phpmysql библиотека использует по умолчанию кодировку latin для коннекта к базе, и с этим настройками кодировки самой базы ничего поделать нельзя. Или кодировка phpmysql зависит от default_charset в php.ini?


M
Mal Hack
Один топик один вопрос!


Это сообщение отредактировал(а) Mal Hack - 15.1.2007, 10:46
PM MAIL   Вверх
Страницы: (2) [Все] 1 2 
Закрытая темаСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Тексты | Следующая тема »


 




[ Время генерации скрипта: 0.0858 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.