Web-мастер: курс молодого бойца

Регулярные выражения

   

 Добавлено 2010-01-24 14:27:32
denis


Сообщений: 22
Зарегистрирован: 01.02.2008

Цитировать
собственно проблема в герулярках:
код проверки ввода данных:
if(!empty($_POST['name']) && !empty($_POST['msg']))
{   
 if(!preg_match("%^[a-z0-9]{3,15}$%i", $_POST['name']))
    {
        header('Refresh: 1; url=write.php');    
        echo '<div class="header">';    
        echo 'Неправильно введено имя!';  
        echo '</div>';
exit;
    }
 if (!preg_match("%^[a-zA-Z0-9\.\,\!\?\-\+\=]{2,250}$%i", $_POST['msg'])) 
    {    
        header('Refresh: 1; url=write.php');    
        echo '<div class="header">';    
        echo 'Текст содержит недопустимые символы!';    
        echo '</div>';
exit;
    }
это очень уж слишком режет вводимую информацию, нужно чтобы пользователь смог ввести имя и сообщение на русском и чтобы в базу то же записывалось на русском, а не интересным транслитом)

сама база:
CREATE TABLE IF NOT EXISTS `gosty` 
(
  `id` int(11) NOT NULL auto_increment,
  `msg` varchar(255) NOT NULL,
  `name` varchar(255) NOT NULL,
  `ip` varchar(255) NOT NULL,
  `agent` varchar(255) NOT NULL,
  `date` varchar(255) NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=2 ;
подскажите как сделать чтобы вводимая информация отображалась и записывалась на русском в мускул, и проверку как нить по безопаснее, но на русском тоже, с пробелами, запятыми как полагается..


Лучший способ убедиться, что меры предосторожности не понадобятся, это своевременно принять их.
Наверх  Посмотреть профиль    

 Добавлено 2010-01-24 19:04:58
evgenijj
Модератор




Сообщений: 1371
Зарегистрирован: 09.11.2007

Цитировать
denis пишет:
это очень уж слишком режет вводимую информацию, нужно чтобы пользователь смог ввести имя и сообщение на русском
Вот это вот
%^[a-z0-9]{3,15}$%i
называется шаблон. Функция preg_match() проверяет соответствие переменной $_POST['name'] этому шаблону. Соответственно, чтобы можно было использовать русские буквы, надо их добавить:
%^[a-zа-яё0-9]{3,15}$%i
Здесь мы говорим, что в переменной $_POST['name'] допустимы строчные и заглавные буквы (использован модификатор i) латинского алфавита, строчные и заглавные буквы русского алфавита и цифры.

Если сайт (и скрипты сайта) в кодировке UTF-8, надо еще использовать модификатор u:
%^[a-zа-яё0-9]{3,15}$%iu

Чтобы правильно записать информацию в БД, надо указать серверу, в какой кодировке мы отдаем ему информацию. Т.е. в общем случае, сайт (и скрипты) у нас могут быть в любой из кодировок: UTF-8, Windows-1251, KOI8-R, ISO 8859-5. И информация в БД может быть в любой кодировке: UTF-8, Windoews-1251, KOI8-R, ISO 8859-5, cp866. И кодировка сайта не обязана совпадать с кодировкой, в которой хранит информацию сервер базы данных. Вообще, разные таблицы базы данных могут хранить информацию в разных кодировках. Мало того, в пределах одной таблицы БД текстовые столбцы могут быть в разных кодировках:
CREATE TABLE `test` (
  `dos_name` TEXT CHARACTER SET cp866 COMMENT 'Кодировка DOS',
  `win_name` TEXT CHARACTER SET cp1251 COMMENT 'Кодировка Windows',
  `koi8r_name` TEXT CHARACTER SET koi8r COMMENT 'Кодировка KOI8-R',
  `utf8_name` TEXT CHARACTER SET utf8 COMMENT 'Кодировка UTF-8'
);

Наша задача - сообщить серверу БД, в какой кодировке мы будем отдавать данные, и в какой кодировке он их должен отдавать. Для этого после установления соединения с сервером мы выполняем запрос
SET NAMES 'cp1251';
<?php
$dbhost     
"localhost"// Хост
$dblogin    "root";      // Имя пользователя БД
$dbpassword "";          // Пароль пользователя БД
$db         "mydb";      // Имя БД

mysql_connect($dbhost$dblogin$dbpassword) or die();
mysql_query ("SET NAMES 'cp1251'");
mysql_select_db($db) or die();
.....
?>



Денежные купюры пронумерованы для того, чтобы когда-нибудь я мог сложить их все одну к одной, по порядку.
Наверх  Посмотреть профиль   Сайт автора Отредактировано автором 03.11.2010
   
Быстрый ответ
 
Цвет шрифта: Закрыть все теги
Сообщение
Защитный код