Не могу понять где ломается кодировка при записи данных в таблицу БД.
Написал пробный скрипт, файл в кодировке UTF8 без BOM.
База и таблица сгенерирована в SYNOLOGY с помощью phpmyadmin.
Структура таблицы
-- phpMyAdmin SQL Dump -- version 3.5.2.2 -- http://www.phpmyadmin.net -- Хост: localhost -- Время создания: Окт 23 2012 г., 14:32 -- Версия сервера: 5.1.49 -- Версия PHP: 5.3.15 SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO"; SET time_zone = "+00:00"; -- База данных: `test2` -- -------------------------------------------------------- -- Структура таблицы `test_form` CREATE TABLE IF NOT EXISTS `test_form` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(255) COLLATE utf8_unicode_ci NOT NULL, `text` text COLLATE utf8_unicode_ci NOT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=4;
Содержимое скрипта:
<?echo "<!doctype html public \"-//w3c//dtd html 4.0 transitional//en\">";
echo "\n<html>
<head>
<meta content='text/html; charset=utf-8' http-equiv='content-type'>";
echo "\n<title>testpage тестовая</title>";
echo "\n</head>";
echo "\n<body>";
$DBServer = "localhost";
$DBName = "test2";
$DBUser = "test2";
$DBPas = "123456";
function BaseConnect()
{
global $DBServer,
$DBName,
$DBUser,
$DBPas;
$connection = @mysql_Connect($DBServer,$DBUser,$DBPas);
mysql_select_db($DBName);
mysql_query('SET NAMES utf8');
mysql_query('SET CHARACTER SET utf8');
return $connection;
}
$connection= BaseConnect();
$test_bd = @mysql_Connect($DBServer,$DBUser,$DBPas); // проверка доступности сервера БД
Echo "test bd: [".$test_bd."]";
$LogCount = 0;
if($_GET['mode']=='update')
{
$sql = "update `test_form` set
`name` ='".$_POST['form_name']."',
`text` ='".$_POST['form_text']."'
where `id` ='".$_GET['update_id']."'";
$result_id = mysql_query($sql);
echo "выполняем обновление базы. запрос:".$sql;
}
if($_GET['mode']=='add')
{
$sql = "insert into `test_form` (`id`,`name`,`text`) VALUES (NULL,'".$_POST['form_name']."','".$_POST['form_text']."')";
$result_id = mysql_query($sql);
echo "выполняем запись в базу. запрос:".$sql;
}
$sql="select * from `test_form` order by `id`";
$result = mysql_query($sql);
$Count = mysql_NumRows($result);
while ($Log_array = mysql_fetch_array($result))
{
$LogCount++;
echo "<br>запись № ".$LogCount." id[".$Log_array['id']."]";
echo "<form action='index.php?mode=update&update_id=".$Log_array['id']."' enctype='multipart/form-data' method='post'>";
echo "<input type='text' name='form_name' value='".$Log_array['name']."'>
<br><textarea name='form_text' cols='100' rows='5' >".$Log_array['text']."</textarea>
<br><button type='submit' title='нажми'>обновить</button>";
echo "</form>";
}
echo "<br>запись новая";
echo "<form action='index.php?mode=add' enctype='multipart/form-data' method='post'>";
echo "<input type='text' name='form_name' value=''>
<br><textarea name='form_text' cols='100' rows='10' ></textarea>
<br><button type='submit' title='нажми'>добавить</button>";
echo "</form>";
echo "\n</body>\n</html>";
?>
При работе получаю вместо руских символов знаки вопроса.
У хостера и на Денвере этот пример работает без знаков вопроса.
С другой стороны phpmyadmin в SYNOLOGY вполне нормально работает с формами и пишет в таблицы.
Что я делаю в скрипте не правильно для SYNOLOGY?