ecspl01t
Новичок
Здравствуйте.
Проблема заключается в кодировке комментариев. Сайт сам по себе на кодировке cp1251, форма комментариев на utf8. Что-то я не знаю как правильно выразится, расскажу сам процесс...
То есть когда я добавляю заявку/комментарий он сразу показывает его в cp1251 без обновление страницы (скрин1- слева), после обновление страницы я вижу уже кодировку в utf8(скрин1-справа), если зайди в phpmyadmin после добавление комментария то мы увидим (скрин 2) иероглифы, не зависимо от кодировки.
Я так понял, что отправка комментария сама по себе кривая, отсылает из php в mysql в utf8.
Сам вопрос, как сделать так, чтобы отсылал в cp1251?
http://upyourpic.org/images/201204/px3e1tdt1a.png -скрин1
http://upyourpic.org/images/201204/kjzdmhfrgr.png -скрин2
comment.class.php
submit.php
connect.php
Проблема заключается в кодировке комментариев. Сайт сам по себе на кодировке cp1251, форма комментариев на utf8. Что-то я не знаю как правильно выразится, расскажу сам процесс...
То есть когда я добавляю заявку/комментарий он сразу показывает его в cp1251 без обновление страницы (скрин1- слева), после обновление страницы я вижу уже кодировку в utf8(скрин1-справа), если зайди в phpmyadmin после добавление комментария то мы увидим (скрин 2) иероглифы, не зависимо от кодировки.
Я так понял, что отправка комментария сама по себе кривая, отсылает из php в mysql в utf8.
Сам вопрос, как сделать так, чтобы отсылал в cp1251?
http://upyourpic.org/images/201204/px3e1tdt1a.png -скрин1
http://upyourpic.org/images/201204/kjzdmhfrgr.png -скрин2
comment.class.php
Код:
<?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;
}
}
?>
Код:
<?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).'}';
}
?>
Код:
<?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);
?>