Проблема с кодировкой при выполнении фунции insert
Как я успел убедить - это длвольно распространенная проблема, но решения так и не нашел! Суть в том, что на определенной странице вызывается файл comment.php cо следующим кодом:
PHP код:
<? require_once 'blocks/commetsbd.php';
$sql = "
SELECT id, parent_id, name, comment, website, avatar,
DATE_FORMAT(date_add, '%d %M %Y %H:%i') as date_add
FROM commets";
$query = mysql_query($sql);
while($row = mysql_fetch_assoc($query))
{
$data[$row[id]] = $row;
}
function mapTree($dataset) {
$tree = array();
foreach ($dataset as $id=>&$node) {
if (!$node['parent_id']) {
$tree[$id] = &$node;
} else {
$dataset[$node['parent_id']]['childs'][$id] = &$node; //
}
}
return $tree;
}
function commentsToTemplate($comment)
{
ob_start();
include 'comment_template.php';
$comments_string = ob_get_contents();
ob_end_clean();
return $comments_string;
}
function commentsString($data)
{
foreach($data as $w)
{
$string .= commentsToTemplate($w);
}
return $string;
}
$data = mapTree($data);
$comments = commentsString($data);
$data = null;
?>
И вызываемый из ява скрипта файл, который вставляет введенную информацию в БД с таким кодом:
PHP код:
<?php
sleep(1); // Установим задержку выполнения в 3с, только для того, чтобы увидеть в браузере картинку лоадера при отправке данных))
if($_POST[parent_id]) $parent_id = preg_replace('/\D+/i','', $_POST[parent_id]);
else $parent_id = 0;
$author = trim($_POST[author]);
$comment = trim($_POST[comment]);
$ava = trim($_POST[ava]);
$web = trim($_POST[web]);
/* Если имя или комментарий не заполнены, прервем выполнение скрипта и вернем массив
с ошибками преобразованный в строку формата JSON c сообщением об ошибке
Мы не просто укажем js-скрипту, что у нас возникла ошибка, но также передадим сообщение и имя поля,
которое не заполнено (или заполнено неверно, если вы решите реализовать доп. проверку)
Конечно, можно реализовать проверку на строне клиента и не позволять человеку вообще отправлять
незаполненную форму, но проверка на стороне сервера обязательна */
if(!$author) $error[author] = Please type your name!';
if(!$comment) $error[comment] = 'Please type your comment!';
// Сохраняем данные в БД
require_once 'blocks/commetsbd.php';
$sql = "INSERT INTO commets (parent_id, name, comment, website, avatar, date_add) VALUES ($parent_id, '$author', '$comment', '$web', '$ava', NOW())";
$result = mysql_query($sql);
if(!$result)
{
$error[] = 'Error';
exit(json_encode($error));
}
exit();
?>
Но при вставке в БД все передается в иероглифах, хотя везде кодировка стоит cp1251, когда на странице, которая делает вывод из базы ставишь utf8 - текст выводится нормально, а вот все остальное иероглифами!
Помогите исправить проблему так, чтоб не менять всю кодировку на utf8/