1

Тема: Проблемы с кодировкой

В phpmyadmin в таблицах отображается что-то вроде ????????, хотя на сайте все на русском. Ну думаю: ничего страшного и думал так до тех пор пока не решил проверить отправку писем. У получателя письма вместо нормального русского текста отображается что-то вроде ?????????????????????????????????????.

SHOW GLOBAL VARIABLES LIKE 'char%';

Variable_name     Value
character_set_client     latin1
character_set_connection     latin1
character_set_database     latin1
character_set_filesystem     binary
character_set_results     latin1
character_set_server     latin1
character_set_system     utf8
character_sets_dir     /usr/share/mysql/charsets/

Помогите пожалуйста
ЗЫ: сайт находится на 1free.ws
ЗЗЫ: я чайник xD

2

Re: Проблемы с кодировкой

swordik
Решение состоит из двух этапов: перекодировать данные и настроить кодировку соединения с MySQL.

1) Для перекодировки данных создайте дамп БД и покажите из него структуру любой таблицы содержащей поля с кириллицей. Затем я вышлю скрипт перекодировки. Не меняйте в phpMyAdmin кодировки и сравнение таблиц и полей, это может уничтожить данные!

2) Установка кодировки соединения с MySQL зависит от того что за скрипт стоит на сайте. Если это один из распространенных форумов, то в нем должна быть соответствующая настройка конфигурации, которую необходимо выставить в cp1251. Если это самописанный скрипт, то сразу после функции mysql_connect необходимо добавить строку:
mysql_query('SET NAMES cp1251');

3

Re: Проблемы с кодировкой

[spoiler]-- Структура таблицы `chat`
--

CREATE TABLE IF NOT EXISTS `chat` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `username` text NOT NULL,
  `time` text NOT NULL,
  `message` longtext NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=71 ;

--
-- Дамп данных таблицы `chat`
--

INSERT INTO `chat` (`id`, `username`, `time`, `message`) VALUES
(60, 'swordik', '13:08', ':('),
(59, 'swordik', '13:07', '???-???'),
(58, 'swordik', '13:07', ':)'),
(57, 'swordik', '12:58', '???? ??????'),
(55, 'swordik', '03:03', ':)'),
(56, 'swordik', '03:03', '??? ????????'),
(54, 'swordik', '03:03', '6)'),
(53, 'swordik', '03:03', 'G???????'),
(61, 'swordik', '13:08', '???'),
(62, 'go_blin', '13:09', '??? ??? ???!'),
(63, 'swordik', '13:08', '???'),
(64, 'swordik', '13:10', '??? ?????!'),
(65, 'Goblin', '13:48', '??????!)'),
(66, 'Goblin', '13:49', 'swordik, ?????? ???? ? ????? 5515058 :) ? ???? ???? ???? ????)'),
(67, 'ZhOiK', '14:30', '??????? ????'),
(68, 'ZhOiK', '14:30', '??????? ????'),
(69, 'swordik', '00:47', '?????? :)'),
(70, 'swordik', '02:14', '<b>?? ?????????? ??? ? ??????? ????????!');
[/spoiler]
Это оно?

4

Re: Проблемы с кодировкой

swordik
Отправил на вашу почту скрипт перекодировки. После перекодировки и обратного импорта данных в БД надо будет сразу заняться вторым этапом - установкой кодировки соединения с MySQL, иначе кириллицу на сайте не увидите.

5

Re: Проблемы с кодировкой

Hanut сказал:

Отправил на вашу почту скрипт перекодировки. После перекодировки и обратного импорта данных в БД надо будет сразу заняться вторым этапом - установкой кодировки соединения с MySQL, иначе кириллицу на сайте не увидите.

Cпасибо! Вы великий человек

6 (изменено: swordik, 2010-02-10 19:55:31)

Re: Проблемы с кодировкой

Хммм я так понял mysql_query('SET NAMES cp1251'); надо вставлять в файл конфигурации? Я вставляю, а кириллица отображается вопросами
Мой config.ini

[spoiler]<?php

$config_server = "Хост"; //
$config_database = "база"; //
$config_username = "имя"; //
$config_password = "Пароль"; //
$secret_key = "mysecret"; //Secret key, make it a random word/sentence/whatever

$config_language = "en"; //Language of the game
$config_name = "Name"; //Name of your game

//Do not edit below this line

$version = "0.2";
'
?>[/spoiler]

7

Re: Проблемы с кодировкой

swordik
Нет, не в файл конфигурации. Если в документации скрипта не упоминается директива конфигурации устанавливающая кодировку соединения с MySQL, то необходимо самому отредактировать скрипт.

Поиском по всем файлам скрипта найдите вхождение функции mysql_connect и сразу после нее добавьте данную строку:
[mono]mysql_query('SET NAMES cp1251');[/mono]

8

Re: Проблемы с кодировкой

Попутный вопрос: есть файл .htaccess . В нём такие строки:
AuthType Basic
AuthName "Введите логин и пароль"
# Путь к файлу с паролями .htpasswd
AuthUserFile /xampp/xampp/.htpasswd
require valid-user
Так вот "AuthName "Введите логин и пароль" " отображаестя каракулями при отображении в любом браузере. Где менять кодировку, чтобы была кирилица???
пробовал сохранять файл в вин, и в утф, но нет результа.

9

Re: Проблемы с кодировкой

Ruskat
Изначально идет latin1 и кроме латиницы там ничего написать не получится.

10

Re: Проблемы с кодировкой

Hanut
А мона как-то сделать вместо latin1 utf-8 ???

11

Re: Проблемы с кодировкой

Ruskat сказал:

А мона как-то сделать вместо latin1 utf-8 ???

Нет.

12 (изменено: Ruskat, 2010-02-23 22:36:17)

Re: Проблемы с кодировкой

Поставил наконец то по вашему ману серваччо. Работает. Тока вот с кодировкой проблема. вся кириллица похожа на ББББББББББ... скажите мне пожалуйста:
1- в каком файле конфигурации апача и как установить кодировку по умолчанию?
2- можно ли установить несколько кодировок, чтобы если один скрипт в утф, а другой в вин 1251, то был авто выбор.
можно и средствами хтацесс все сделать, но нужны средства апача.
-------------
И ещё: при установке скрипта есть пункт " Поддержка MySQL     Нет".
Рекомендуемые настройки      Рекомендуемое значение      Текущее значение
Буферизация вывода                 Выключено                              Включено
Это как исправить?
---------------------------
Избавился от " Поддержка MySQL     Нет".
-Раскомментировать в PHP.ini cтрочку  [size=14]extension=php_mysql.dll[/size]

13

Re: Проблемы с кодировкой

Ruskat
Не похоже, чтобы вы по руководству настраивали, иначе у вас не было бы проблемы с расширением MySQL и кириллицей.

Установка кодировки соединения с MySQL прописывается в my.ini в разделе [mysqld]:
[mono]init-connect="SET NAMES cp1251"[/mono]

Если необходимо на одном сервере иметь разные кодировки, то следует устанавливать кодировку соединения с MySQL принудительно. Практически у всех распространенный скриптов для этого есть соответствующие директивы конфигурации. Если такой директивы нет, то понадобится править скрипты: следует найти все вхождения функции mysql_connect и сразу после нее прописать строку:
[mono]mysql_query('SET NAMES cp1251'); // Для Юникода будет utf8.[/mono]

Для отключения буферизации надо в корневой .htaccess хоста записать строку:
[mono]php_value output_buffering Off[/mono]