Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Проблема с кодировкой
 
 автор: uvajs   (08.09.2011 в 11:55)   письмо автору
 
 

Здравствуйте! У меня проблема с кодировкой.База и весь сайт в кодировке: ср1251, но когда добавляю информацию в базу с помощью запроса, то в базу добавляются (Сентября ????). Можно ли написать запрос в кодировке 1251?

  Ответить  
 
 автор: lightning.say   (08.09.2011 в 12:51)   письмо автору
 
   для: uvajs   (08.09.2011 в 11:55)
 

mysql_query("SET NAMES cp1251")

перед запросом поставьте

  Ответить  
 
 автор: uvajs   (08.09.2011 в 14:20)   письмо автору
 
   для: lightning.say   (08.09.2011 в 12:51)
 

>
mysql_query("SET NAMES cp1251")

>перед запросом поставьте

Не выходит. все равно ????

Подключение к базе:

<?
$db 
mysql_connect("localhost","root","") or die ("Не удалось подключиться к базе. Проверьте логин / пароль.");
$base mysql_select_db("kav",$db) or die ("Не удалось подключиться к базе.");

mysql_query("SET NAMES 'cp1251';");
mysql_query("SET CHARACTER SET 'cp1251';");
mysql_query("SET SESSION collation_connection = 'cp1251_general_ci';");
mysql_query("SET lc_time_names = 'ru_RU'"); ?>

  Ответить  
 
 автор: lightning.say   (08.09.2011 в 15:19)   письмо автору
 
   для: uvajs   (08.09.2011 в 14:20)
 

SHOW CREATE DATABASE имя_бд; 

SHOW CREATE TABLE имя_табл;


что выдают?

  Ответить  
 
 автор: uvajs   (08.09.2011 в 16:36)   письмо автору
 
   для: lightning.say   (08.09.2011 в 15:19)
 

>
SHOW CREATE DATABASE имя_бд; 
>
>SHOW CREATE TABLE имя_табл;

>
>что выдают?


mysql> SHOW CREATE DATABASE kav;
+----------+----------------------------------------------------------------+
| Database | Create Database                                                |
+----------+----------------------------------------------------------------+
| kav      | CREATE DATABASE `kav` /*!40100 DEFAULT CHARACTER SET cp1251 */ |
+----------+----------------------------------------------------------------+
1 row in set (0.01 sec)

Второй запрос не проходит.
Т.е. пишет, что база не выбрана. Хотя я знаю, что она тоже в кодировке 1251.


--
-- Table structure for table `comments`
--

CREATE TABLE IF NOT EXISTS `comments` (
  `id` int(5) NOT NULL AUTO_INCREMENT,
  `parent_id` int(5) NOT NULL DEFAULT '0',
  `post` int(10) NOT NULL,
  `name` varchar(50) NOT NULL,
  `comment` text NOT NULL,
  `date_add` datetime NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=cp1251 AUTO_INCREMENT=27 ;

  Ответить  
 
 автор: uvajs   (09.09.2011 в 01:24)   письмо автору
 
   для: uvajs   (08.09.2011 в 16:36)
 

Не уже ли больше никто... (((((

  Ответить  
 
 автор: lightning.say   (09.09.2011 в 11:42)   письмо автору
 
   для: uvajs   (09.09.2011 в 01:24)
 

попробуйте вначале файла добавить если нет:
<?php  
header
('Content-type: text/html; charset="windows-1251"');  
?> 

  Ответить  
 
 автор: Lotanaen   (09.09.2011 в 09:54)   письмо автору
 
   для: uvajs   (08.09.2011 в 11:55)
 

а можно более подробно о проблеме... откуда берете данные, как добавляете, как проверяете запись в БД и т.д.

  Ответить  
 
 автор: uvajs   (09.09.2011 в 13:38)   письмо автору
 
   для: Lotanaen   (09.09.2011 в 09:54)
 

>а можно более подробно о проблеме... откуда берете данные, как добавляете, как проверяете запись в БД и т.д.




.htaccess : AddDefaultCharset windows-1251

В начале файла добавил:
header('Content-Type: text/html; charset=windows-1251');

Между тегами <head> прописан так:
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
Подключение к базе так:

<? $db mysql_connect("localhost","root","") or die ("Не удалось подключиться к базе. Проверьте логин / пароль.");
$base mysql_select_db("kav",$db) or die ("Не удалось подключиться к базе.");

mysql_query("SET NAMES 'cp1251';");
mysql_query("SET CHARACTER SET 'cp1251';");
mysql_query("SET SESSION collation_connection = 'cp1251_general_ci';");
mysql_query("SET lc_time_names = 'ru_RU'");
?>


База в кодировке ср1251:


mysql> SHOW CREATE DATABASE kav; 
+----------+----------------------------------------------------------------+ 
| Database | Create Database                                                | 
+----------+----------------------------------------------------------------+ 
| kav      | CREATE DATABASE `kav` /*!40100 DEFAULT CHARACTER SET cp1251 */ | 
+----------+----------------------------------------------------------------+ 
1 row in set (0.01 sec)




Таблица comments:

ENGINE=MyISAM DEFAULT CHARSET=cp1251 AUTO_INCREMENT=27 ;

В ней поля: comment и author тоже: cp1251_general_ci


Думаю это связано скриптом добавления...

Код добавления:



<?php
if($_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest') {

      
      
      
sleep(1); 
      
      
      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]);
      

      
      if(!
$author)   $error[author] = 'Введите имя!';
      if(!
$comment)  $error[comment] = 'Напишите комментарий!';
      
      if(
$error)
        exit(
json_encode($error));
      

      
      require_once 
'db.php';  
      
      
$sql "INSERT INTO comments (parent_id, name, comment, date_add) VALUES ($parent_id, '$author', '$comment', NOW())";
      
$result mysql_query($sql);
      if(!
$result
      {
        
$error[] = 'Произошла ошибка, комментарий не сохранен';
        exit(
json_encode($error));
      }
      exit();

 
?>




А когда я добавляю комменты в ручную через phpMyAdmin, то на страничке они выводятся нормально.

  Ответить  
 
 автор: Lotanaen   (09.09.2011 в 14:37)   письмо автору
 
   для: uvajs   (09.09.2011 в 13:38)
 

похоже что у вас данные приходят в кодировке UTF-8 - попробуйте перед записью их перекодировать из UTF-8 в cp1251

  Ответить  
 
 автор: lightning.say   (09.09.2011 в 15:50)   письмо автору
 
   для: uvajs   (09.09.2011 в 13:38)
 

попробуйте выполнить код

$result = mysql_query('SHOW VARIABLES LIKE \'%CHAR%\''); 
while( $row = mysql_fetch_array($result) ) 
echo $row[0].' : '.$row[1] . '<br>'; 


что выдает?

  Ответить  
 
 автор: uvajs   (09.09.2011 в 16:06)   письмо автору
 
   для: lightning.say   (09.09.2011 в 15:50)
 

character_set_client : cp1251
character_set_connection : cp1251
character_set_database : cp1251
character_set_filesystem : binary
character_set_results : cp1251
character_set_server : cp1251
character_set_system : utf8
character_sets_dir : \usr\local\mysql-5.1\share\charsets\

  Ответить  
 
 автор: Nahimov   (21.09.2011 в 01:41)   письмо автору
 
   для: uvajs   (08.09.2011 в 11:55)
 

У меня тоже возникла проблема с этой же кодировкой в MySql. Помогите, кто чем может, сегодня целый день промучался, и как об стенку горохом ((
Дело вот в чем: в базе данных задаю кодировку виндоуз-1251, такая же кодировка установлена в файлах файл.рНр в хтмл-части (charset=windows-1251), пишу напрямую в БД тексты кирилицей и когда загружается файл (в броузере), тексты, прописанные в хтмл(е) отображаются нормально, а те, что вытаскиваются из БД выглядят каракулями. Подскажите лекарство, плиз, очень нужно!

База настроена на ср1251_general_ci, тексты в Базе по-русски выглядят читабельно, в каждой таблице такие же настройки кодировки. Если в броузере принуудительно установить отображение в кодировке КОI8-r, то нормальными становятся символы из БД, а каракулями весь остальной ХТМЛем прописанный текст. При этом пробовал в файлах менять настройки ХТМЛя на КОI8-r - пофиг. ((

  Ответить  
 
 автор: cheops   (21.09.2011 в 11:32)   письмо автору
 
   для: Nahimov   (21.09.2011 в 01:41)
 

А соединение с MySQL как устанавливаете? У вас есть вызов запроса SET NAMES cp1251?

PS Под новые вопросы, лучше заводить новые темы.

  Ответить  
 
 автор: Nahimov   (22.09.2011 в 00:15)   письмо автору
 
   для: cheops   (21.09.2011 в 11:32)
 

Да, большое спасибо. Дело было в этой строчке. Мне хостер тоже объяснил: у них вся информация из БД при изъятии перекодируется в КОИ8-У, если такую строчку не вводить...
Ну Ура! заработало! )))

  Ответить  
 
 автор: Nahimov   (22.09.2011 в 00:15)   письмо автору
 
   для: cheops   (21.09.2011 в 11:32)
 

Да, большое спасибо. Дело было в этой строчке. Мне хостер тоже объяснил: у них вся информация из БД при изъятии перекодируется в КОИ8-У, если такую строчку не вводить...
Ну Ура! заработало! )))

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования