1

Тема: Знаки вопроса вместо текста

Здравствуйте! У меня уже была такая проблема пару месяцев назад, но с помощью этого форума (по поиску) я смог найти решение. Сейчас как ни искал, никак не могу найти те темы, что мне в тот момент помогли, да и я сглупил - не сохранил темы как дальнейшее настольное руководство для себя. Поэтому надеюсь на Вашу помощь.
Проблема банальна: Сделал экспорт БД с хостера, залил базу на дом. сервер (xampp), ну и вместо читаемого текста, знаки вопроса. На сколько я помню, нужно что-то прописывать в файле my.ini и в файле движка, где указывается кодировка соединения с БД.
Заранее благодарен за любой ответ!

2

Re: Знаки вопроса вместо текста

Вот в этой статье http://php-myadmin.ru/learning/instrument-mysql.html описана настройка my.ini
Если ничего не поможет пишите попробуем разобраться.

3

Re: Знаки вопроса вместо текста

Спасибо, но не помогло. В my.ini у меня уже прописаны эти данные, вот его листинг:

[client]
host        = .
port        = 3306
socket        = "MySQL"
character-sets-dir="D:/xampp/mysql/share/charsets"

[mysqld]
basedir                 = "D:/xampp/mysql/"
datadir                 = "D:/xampp/mysql/data/"
port                    = 3306
socket                    = "MySQL"
skip-locking
key_buffer              = 16M
max_allowed_packet      = 1M
table_cache             = 64
sort_buffer_size        = 512K
net_buffer_length       = 8K
read_buffer_size        = 256K
read_rnd_buffer_size    = 512K
myisam_sort_buffer_size = 8M
character-sets-dir="D:/xampp/mysql/share/charsets"
init-connect="SET NAMES cp1251" 
character-set-server=cp1251
default-time-zone       = "Asia/Karachi"
log_error           = "D:/xampp/mysql/data/mysql.err"
pid_file            = "mysql.pid"
general_log         = 0
general_log_file    = "D:/xampp/mysql/data/mysql.log"
slow_query_log      = 0
slow_query_log_file = "D:/xampp/mysql/data/mysql-slow.log"
enable-named-pipe
skip-federated
server-id = 1
tmpdir             = "D:/xampp/tmp/"
innodb_data_home_dir            = "D:/xampp/mysql/data/"
innodb_data_file_path           = ibdata1:10M:autoextend
innodb_log_group_home_dir       = "D:/xampp/mysql/data/"
innodb_buffer_pool_size         = 16M
innodb_additional_mem_pool_size = 2M
innodb_log_file_size            = 5M
innodb_log_buffer_size          = 8M
innodb_flush_log_at_trx_commit  = 1
innodb_lock_wait_timeout        = 50

[mysqldump]
quick
max_allowed_packet = 16M

[mysql]
default-character-set=cp1251
no-auto-rehash

[isamchk]
key_buffer = 20M
sort_buffer_size = 20M
read_buffer = 2M
write_buffer = 2M

[myisamchk]
key_buffer = 20M
sort_buffer_size = 20M
read_buffer = 2M
write_buffer = 2M

[mysqlhotcopy]
interactive-timeout

4 (изменено: DmitryV, 2011-01-29 13:59:36)

Re: Знаки вопроса вместо текста

Откройте файл дампа например в Notepad++ посмотрите в какой кодировке он читаем.
Покажите кусочек файла дампа с данными с хостера.

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

5

Re: Знаки вопроса вместо текста

Дамп в кодировке cp1251, читается как надо и в pma тоже все данные выглядят как надо, почему на сайт выводятся знаки вопроса не понимаю. У меня к сожалению нет скайпа sad

-- phpMyAdmin SQL Dump
-- version 3.3.8.1
-- http://www.phpmyadmin.net
--
-- Хост: localhost
-- Время создания: Янв 27 2011 г., 12:55
-- Версия сервера: 5.0.91
-- Версия PHP: 5.2.9

SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";


/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;

--
-- База данных: `metinon_main`
--

-- --------------------------------------------------------

--
-- Структура таблицы `base_banlist`
--

CREATE TABLE IF NOT EXISTS `base_banlist` (
  `banlist_ip` varchar(100) NOT NULL default '',
  `banlist_admin` smallint(5) unsigned NOT NULL default '0',
  `banlist_reason` tinytext NOT NULL,
  PRIMARY KEY  (`banlist_ip`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251;

6 (изменено: DmitryV, 2011-01-29 15:16:59)

Re: Знаки вопроса вместо текста

в вашем скрипте сайта найдите где идет соединение с базой данных и после соединения вставьте запрос:

mysql_query ('SET NAMES cp1251'); 

PS: в страницах сайта проверьте в коде meta тегах какая кодировка задана.

<meta http-equiv="Content-Type" content="text/html; charset= ???? " />

7

Re: Знаки вопроса вместо текста

SScrew сказал:

в файле движка, где указывается кодировка соединения с БД.

Эту конфигурационную директиву вы должны найти в документации движка и прописать в ней cp1251.

Либо, как Дмитрий указал выше, найти вхождение функции mysql_connect и сразу после этой функции добавить строку устанавливающую кодировку соединения с БД:

mysql_query('SET NAMES cp1251');

И еще один момент, который возможен из-за неверной настройки PHP в XAMPP.
Создайте в корне хоста файл .htaccess и пропишите в нем строку:

PHP_VALUE default_charset windows-1251

И наконец последний штрих - для подключения скрипта не используйте root, создайте отдельного пользователя MySQL и выделите ему только необходимые привилегии (не выставляйте привилегии из раздела администрирования).

8

Re: Знаки вопроса вместо текста

Большое спасибо всем! Оказывается в файле движка нужно было указать для переменной charset значение cp1251, а в свою очередь, эта переменная подключается к mysql_query('SET NAMES...'), а если просто написать или дописать mysql_query('SET NAMES cp1251'); после mysql_query(SET NAMES '$charset'); то будут выводиться знаки вопроса.  smile

9

Re: Знаки вопроса вместо текста

DmitryV сказал:

в вашем скрипте сайта найдите где идет соединение с базой данных и после соединения вставьте запрос:

mysql_query ('SET NAMES cp1251'); 

Доброй ночи! Большой человек, большущее тебе БЛАГОДАРЮ! Не давно писал проект, да установил денвер последнюю сборку, при создании страниц кодировку по умолчанию поставил виндовс-1251, так всё работало замечательно, но ведь надо переносить в базу весь текст, перенёс, подключил и на тебе, одни вопросы, у меня чуть зрачки вопросами не стали, хотел клавиатуру съесть... промучился часов 5 (лишь иногда вставая из-за стола), кодировал и нотпадом, и экспорт базы делал да через нотпад преобразовывал, после импорта ещё хуже стало. Дело вот ещё в чём, до этого ни раз делал подключения, вывод текста, и всё было класс, даже учесть то, что адоб дримвивер хоть и программа хорошая касательно подсказок, но в кодировке она как была тупая, так и осталась. При указании кодировки через функцию хедер (контент-тайп и так далее); - даже если в базе (хотя что - даже, так и было), стояла кодировка ютф-8, текст выводился тем не менее правильно. Большое тебе благодарю. И ещё, всё же надо знать почему так произошло?

10

Re: Знаки вопроса вместо текста

Timur-dn сказал:

И ещё, всё же надо знать почему так произошло?

Что произошло? Я не понял.

Денвер настроен на работу с windows-1251, хостинг на который перенесли не был настроен на эту кодировку. Наверное  в этом причина.