Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > Проблема с кодировками в статьях.


Автор: EgorTheBlade 27.8.2010, 19:25
Добрый вечер.При чтении статьи из бд на сайт выводятся ????(utf8).При другом раскладе выводятся '?' в конце статьи.
Какую использовать кодировку?windows?
И как лучше добавлять в статьи картинки?Есть способ через бд?

Автор: bars80080 27.8.2010, 19:41
кодировка - штука интересная и полезная, если умеешь с ней обращаться.
вкратце, надо правильно изначально заливать данные на сервер, и правильно считывать. выглядит это так:

сразу после подключения к БД мы пишем запрос:
SET NAMES `utf8`
этим мы говорим, что наш сайт работает в UTF-8
после чего мы вставляем данные запросами INSERT, чётко осознавая, что у нас на сайте на самом деле кодировка UTF-8

при чтении - аналогично, устанавливаем set names и отдаём в браузер данные, чётко зная, что на сайте именно UTF-8

если мы работаем с другой кодировкой, то соответственно везде меняем UTF-8 на другое слово везде


все дополнительные вопросы только после прочтения этого: http://phpfaq.ru/charset

Автор: EgorTheBlade 28.8.2010, 15:09
Я прописал вручную кодировку 
Код


CREATE DATABASE `news` DEFAULT CHARACTER SET utf8 COLLATE utf8_bin;
USE `news`;

--
-- Table structure for table `news`
--

CREATE TABLE IF NOT EXISTS `news` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `title` varchar(50) DEFAULT NULL,
  `news` text,
  `author` varchar(50) DEFAULT NULL,    
  `date` date DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=41 ;


При  добавлении через phpmyadmin в поля руский текск и открытии сайта   выводится"??????".
Лезть в my.ini?
Статья дала много полезной информации.Но главная проблема осталась.

Автор: gta4kv 28.8.2010, 15:11
Цитата(bars80080 @ 27.8.2010,  19:41)
все дополнительные вопросы только после прочтения этого: http://phpfaq.ru/charset

там есть ответ на вопрос.

Автор: bars80080 28.8.2010, 19:40
Цитата(EgorTheBlade @  28.8.2010,  15:09 Найти цитируемый пост)
При  добавлении через phpmyadmin в поля руский текск и открытии сайта   выводится"??????".

а вы контролируете phpmyadmin? каким образом вы выставляете в нём кодировку?

напишите собственный простенький интерфейс добавления данных на пять строчек кода

Автор: EgorTheBlade 28.8.2010, 19:58
Я писал и руками как указывал выше,так и через phpmyadmin - выставлял кодировку и сравнение.
Какой интерфейс?Другого выхода нет?
я пробовал mysql_query(SET NAMES...).Вы про ето?
Почему не работает через SET NAMES  и Default CHarset?
Я создал корректный файл-он читает utf-8 но теперь он не хочет его импортировать в phpmyadmin.Просто висит.
Код

CREATE DATABASE `news` DEFAULT CHARACTER SET utf8 COLLATE utf8_bin;
USE `news`;
SET NAMES utf8;
-- --------------------------------------------------------
--
-- Table structure for table `news`
--

CREATE TABLE IF NOT EXISTS `news` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `title` varchar(1000) CHARACTER SET utf8 COLLATE utf8_unicode_ci DEFAULT NULL,
  `news` text CHARACTER SET utf8 COLLATE utf8_unicode_ci,
  `author` varchar(1000) CHARACTER SET utf8 COLLATE utf8_unicode_ci DEFAULT NULL,
  `date` date DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=61 ;



Автор: bars80080 28.8.2010, 20:13
Цитата(EgorTheBlade @  28.8.2010,  19:58 Найти цитируемый пост)
Я писал и руками как указывал выше

ммм, не заметил.
Цитата(EgorTheBlade @  28.8.2010,  19:58 Найти цитируемый пост)
Какой интерфейс?Другого выхода нет?

я говорю о том, что написать просто короткий скрипт для примера. посмотреть, работает ли он корректно

в духе:

Код

<?php
error_reporting(E_ALL);

mysql_connect(....);
mysql_query('SET NAMES `utf8`');
mysql_select_db(...);


$text = 'здесь необходимые нам данные. текст статьи, может быть. но при этом мы уверены, что весь текст этого скрипта тоже находится в кодировке utf-8';

$text = mysql_real_escape_string($text);

$sql = 'INSERT INTO `news` (`news`) VALUES ("'.$text.'")';
$q = mysql_query($sql);

header('Content-type: text/html; charset=utf-8');
var_dump($sql);
echo mysql_error().'<br />';

$sql = 'SELECT * FROM `news` ORDER BY `id` DESC LIMIT 1';
$q = mysql_query($sql);
//echo mysql_error().'<br />';

while(false !== ($f = mysql_fetch_assoc($q))) {
    //echo mysql_error().'<br />';
    echo 'row: <br />';
    var_dump($f);
}

?>

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

если не корректно будет, тогда у вас какие-то проблемы с базой. начнём разбираться с ней.
если будет корректно, значит вы просто не можете заставить phpmyadmin работать как следует. но это уже семечки

Автор: EgorTheBlade 28.8.2010, 20:21
Броузер принимает UTF8.
Как вы показали код я делал.
А что может быть не так с бд?
Я делаю на 2ух машинах.Win 7 И Win XP
Через cmd пробовал -результата не дало.

Автор: bars80080 29.8.2010, 00:17
Цитата(EgorTheBlade @  28.8.2010,  20:21 Найти цитируемый пост)
Броузер принимает UTF8.
Как вы показали код я делал.
А что может быть не так с бд?

причём здесь БД? вы данный пример реализовали и получили правильный вывод данных? без каких-либо вопросиков или кракозябр?

тогда БД вообще не причём, всё работает как часы, за исключением связки человек+phpmyadmin

Автор: EgorTheBlade 29.8.2010, 09:26
Как определить в какой кодировке сам файл?Чтобы его подключить через phpmyadmin.
Почему данный файл не подключается через phpmyadmin к сайту?
P.s ?Броузер показывает что страница в utf8 но ?????? остались.

Автор: EgorTheBlade 29.8.2010, 11:23
Обнаружилось что один из файлов sql нерабочий.Перекопирование данных в новый файл разрешило проблему импортирования в phpmyadmin и на сайт.Но на сайте выводятся "??????"

Автор: EgorTheBlade 29.8.2010, 17:38
Заработало при ручном запросе в Php коде.Спасибо за помощь.
Проблема была в битых файлах и моей невнимательности.

Автор: andrus000 29.8.2010, 17:52
Как-то давно... подобную проблему  решил этим способом, в месте изначального подключения к БД: 
Код

mysql_connect("$hostname","$username","$pasww")or die('Not connected : ' . mysql_error());
mysql_select_db("$dbname")or die('Not Selected Data-base : ' . mysql_error());
mysql_query ("set character_set_client='cp1251'");
mysql_query ("set character_set_results='cp1251'");
mysql_query ("set collation_connection='cp1251_general_ci'");


Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)