Новичок
![](./im/images/pips1.gif)
Покинул форум
Сообщений всего: 2
Дата рег-ции: Май 2012
Помог: 0 раз(а)
![](./templates/InvisionExBB/im/spacer.gif)
|
Здравствуйте. Я не знаю, выбрал ли я правильный раздел для задавания вопроса или нет....
я не знал куда еще можно было написать такой вопрос...
Ну вот и сам вопрос:
Проблема заключается в кодировке комментариев. Сайт сам по себе на кодировке cp1251, форма комментариев на utf8. Что-то я не знаю как правильно выразится, расскажу сам процесс...
То есть когда я добавляю заявку/комментарий он сразу показывает его в cp1251 без обновление страницы (скрин1- слева), после обновление страницы я вижу уже кодировку в utf8(скрин1-справа), если зайди в phpmyadmin после добавление комментария то мы увидим (скрин 2) иероглифы, не зависимо от кодировки.
Я так понял, что отправка комментария сама по себе кривая, отсылает из php в mysql в utf8.
Сам вопрос, как сделать так, чтобы отсылал в cp1251?
http://upyourpic[dot]org/images/2012[dot][dot][dot]4/px3e1tdt1a[dot]png -скрин1
http://upyourpic[dot]org/images/2012[dot][dot][dot]4/kjzdmhfrgr[dot]png -скрин2
comment.class.php
CODE ( text):
скопировать код в буфер обмена
<?php class Comment { private $data = array(); public function __construct($row) { /* / Конструктор */ $this->data = $row; } public function markup() { /* / Данный метод выводит разметку XHTML для комментария */ // Устанавливаем псевдоним, чтобы не писать каждый раз $this->data: $d = &$this->data; $link_open = ''; $link_close = ''; if($d['url']){ // Если был введн URL при добавлении комментария, // определяем открывающий и закрывающий теги ссылки //$link_open = '<a href="'.$d['url'].'">'; //$link_close = '</a>'; } $sostav = '<b>СоставЫЫЫasdddd:</b>'; // Преобразуем время в формат UNIX: $d['dt'] = strtotime($d['dt']); // Нужно для установки изображения по умолчанию: $url = 'http://'.dirname($_SERVER['SERVER_NAME'].$_SERVER["REQUEST_URI"]).'/img/default_avatar.gif'; return ' <div class="comment"> <div class="avatar"> '.$link_open.' <img src="http://cup.acantari.org.ua/images/default_avatar.gif" /> '.$link_close.' </div> <div class="name"><b>Название команды:</b> '.$link_open.$d['name'].$link_close.'</div> <div class="sostav">'.$sostav.$link_open.$d['sostav'].$link_close.'</div><br> <div class="contact"><b>Контакты:</b>'.$link_open.$d['contact'].$link_close.'</div> <div class="date" title="Added at '.date('H:i \o\n d M Y',$d['dt']).'">'.date('d M Y',$d['dt']).'</div> <p>'.$d['conntact'].'</p> </div> '; } public static function validate(&$arr) { /* / Данный метод используется для проверки данных отправляемых через AJAX. / / Он возвращает true/false в зависимости от правильности данных, и наполняет / массив $arr, который преается как параметр либо данными либо сообщением об ошибке. */ $errors = array(); $data = array(); // Используем функцию filter_input, введенную в PHP 5.2.0 if(!($data['sostav'] = filter_input(INPUT_POST,'sostav',FILTER_CALLBACK,array('options'=>'Comment::validate_text')))) { $errors['sostav'] = 'Пожалуйста, введите полный Состав.'; } if(!($data['pravila'] = filter_input(INPUT_POST,'pravila',FILTER_CALLBACK,array('options'=>'Comment::validate_text')))) { $errors['pravila'] = 'Пожалуйста, выберете да/нет.'; } // Используем фильтр с возвратной функцией: if(!($data['contact'] = filter_input(INPUT_POST,'contact',FILTER_CALLBACK,array('options'=>'Comment::validate_text')))) { $errors['contact'] = 'Пожалуйста, введите контакты.'; } if(!($data['name'] = filter_input(INPUT_POST,'name',FILTER_CALLBACK,array('options'=>'Comment::validate_text')))) { $errors['name'] = 'Пожалуйста, введите название команды.'; } if(!empty($errors)){ // Если есть ошибки, копируем массив $errors в $arr: $arr = $errors; return false; } // Если данные введены правильно, подчищаем данные и копируем их в $arr: foreach($data as $k=>$v){ $arr[$k] = mysql_real_escape_string($v); } // email дожен быть в нижнем регистре: $arr['sostav'] = strtolower(trim($arr['sostav'])); return true; } private static function validate_text($str) { /* / Данный метод используется как FILTER_CALLBACK */ if(mb_strlen($str)<1) return false; // Кодируем все специальные символы html (<, >, ", & .. etc) и преобразуем // символ новой строки в тег <br>: // Удаляем все оставщиеся символы новой строки $str = str_replace(array(chr(10),chr(13)),'',$str); return $str; } } ?>
submit.php
CODE ( text):
скопировать код в буфер обмена
<?php // Сообщение об ошибке: error_reporting(E_ALL^E_NOTICE); include "connect.php"; include "comment.class.php"; /* / Данный массив будет наполняться либо данными, / которые передаются в скрипт, / либо сообщениями об ошибке. /*/ $arr = array(); $validates = Comment::validate($arr); if($validates) { /* Все в порядке, вставляем данные в базу: */ mysql_query("INSERT INTO comments(name,sostav,pravila,contact) VALUES ( '".$arr['name']."', '".$arr['sostav']."', '".$arr['pravila']."', '".$arr['contact']."' )"); $arr['dt'] = date('r',time()); $arr['id'] = mysql_insert_id(); /* / Данные в $arr подготовлены для запроса mysql, / но нам нужно делать вывод на экран, поэтому / готовим все элементы в массиве: /*/ $arr = array_map('stripslashes',$arr); $insertedComment = new Comment($arr); /* Вывод разметки только-что вставленного комментария: */ echo json_encode(array('status'=>1,'html'=>$insertedComment->markup())); } else { /* Вывод сообщений об ошибке */ echo '{"status":0,"errors":'.json_encode($arr).'}'; } ?>
connect.php
CODE ( text):
скопировать код в буфер обмена
<?php /* Конфигурация базы данных */ $db_host = 'localhost'; $db_user = 'root'; $db_pass = '************'; $db_database = 'fastcup'; /* Конец секции */ $link = @mysql_connect($db_host,$db_user,$db_pass) or die('Не могу установить соединение с базой данных'); mysql_query ("set character_set_client='cp1251'"); mysql_query ("set character_set_results='cp1251'"); mysql_query ("set collation_connection='cp1251_general_ci'"); mysql_select_db($db_database,$link); ?>
|