Форум SAPE.RU

Форум SAPE.RU (http://forum.sape.ru/index.php)
-   Курилка (http://forum.sape.ru/forumdisplay.php?f=22)
-   -   Вопросики (http://forum.sape.ru/showthread.php?t=43260)

BaS1S 11.12.2009 21:00

Вопросики
 
Сразу скажу - название темы как-раз подходит под тему проблемы.)
Вообщем сегодня загрузил сайт на хост, но после заливки базы (с помощью dunver'а) на сайте вместо слов появились вопросительные знаки (??????????????? ?? ???). Менял кодировку на хосте, но ситуация не изменилась. Обращаюсь к бывалым ВебМастерам САПЫ: "Что возможно сделать в данной ситуации?":)
С Уважением.

Avelon 11.12.2009 21:10

после каждого изменения надо удалять links.db чтобы он перезакачался

BaS1S 11.12.2009 21:15

Цитата:

Сообщение от Avelon (Сообщение 655506)
после каждого изменения надо удалять links.db чтобы он перезакачался

А где он лежит не подскажите? А то на ум всплывает только один линкс - папка кода сапы...Вот только сапа ещё не установлена и на кодировку это никак не влияет.:)

Yappie 11.12.2009 21:23

Дело в том, что Денвер по умолчанию использует win-1251 кодировку в базах данных и в настройках локального Апача (атавизм, но что поделать). А большинство современных linux/*bsd-серверов уже выдают заголовок о UTF-8.

Самый простой вариант попробовать - в начале скрипта дописать

PHP код:

<? header('Content-type: text/html; charset=windows-1251'?>

Если не поможет - убираем эту строку и переводим все в UTF-8.

Так что идете в phpmyadmin (http://localhost/tools/), там заходите в нужную базу данных, в Operations (операции), меняете Collation у каждой таблицы на "utf8_general_ci". Затем идете в таблицы (в структуру) и у каждого столбца "карандашиком" меняете collation опять же на "utf8_general_ci".

После этого уже делать дамп и загружать на сервер.

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

PHP код:

@mysql_query ("set character_set_client='utf8'");
@
mysql_query ("set character_set_results='utf8'"); 
@
mysql_query ("set collation_connection='utf8_general_ci'"); 

может сработать и только одна строка (вместо этих трех)

PHP код:

@mysql_query ("set names utf8"); 

но не всегда почему-то в PHP она адекватно воспринимается.

А ну и (хотя уже должно все работать нормально) в заголовках на всякий пожарный выдаем UTF-8 - в самом начале PHP скриптов перед выводом дадим:

PHP код:

<? header('Content-type: text/html; charset=UTF-8'?>


BaS1S 11.12.2009 21:32

Цитата:

Сообщение от Yappie (Сообщение 655522)
Самый простой вариант попробовать - в начале скрипта дописать

PHP код:

<? header('Content-type: text/html; charset=windows-1251'?>


Дампера?

Yappie 11.12.2009 21:34

И чтобы в дальнейшем не мучится в локальный денвер лучше прописать, в

В z:\usr\local\apache\conf\httpd.conf
найти AddDefaultCharset и заменить ее на:
Код:

AddDefaultCharset utf-8
В z:\usr\local\mysql5\my.cnf
в раздел [client] такое:
Код:

[client]
port                  = 3306
socket                = /tmp/mysql5.sock
default-character-set = utf8
character-sets-dir    = /usr/local/mysql5/share/charsets

Добавлено через 57 секунд
Цитата:

Сообщение от BaS1S (Сообщение 655526)
Дампера?

Нет, в Ваш скрипт, выводящий сайт.

И опять же туда же можно попробовать дописать (кроме header, после подключения к БД).

Код:

@mysql_query ("set character_set_client='cp1251'");
@mysql_query ("set character_set_results='cp1251'"); 
@mysql_query ("set collation_connection='cp1251_general_ci'");

Просто смысл в том, что сейчас у Вас на линуксе база в кодировке 1251 (скорее всего).

BaS1S 11.12.2009 21:52

Цитата:

Сообщение от Yappie (Сообщение 655529)
И чтобы в дальнейшем не мучится в локальный денвер лучше прописать, в

В z:\usr\local\apache\conf\httpd.conf
найти AddDefaultCharset и заменить ее на:
Код:

AddDefaultCharset utf-8
В z:\usr\local\mysql5\my.cnf
в раздел [client] такое:
Код:

[client]
port                  = 3306
socket                = /tmp/mysql5.sock
default-character-set = utf8
character-sets-dir    = /usr/local/mysql5/share/charsets


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

Yappie 11.12.2009 21:56

Цитата:

Сообщение от BaS1S (Сообщение 655552)
А если прописать это и затем заного создать бэкап с локалки, то после переноса будет отображаться всё те же вопросы?

Да, это лишь сменит то как по умолчанию НОВЫЕ базы будут создаваться. Вам все равно нужно будет ручками как я описал Вы сменить "collation" у таблиц и столбцов. Как ни крути дамп - настройки на уровне таблицы имеют высший приоритет и их надо поменять...

Хотя во - может есть дампером способ и проще:
http://forum.typo3.biz/showthread.php?t=5720

Код HTML:

1. Бякап дампером (строка define('CHARSET', 'auto'); справляется прекрасно)
2. пишем строку define('RESTORE_CHARSET', 'forced->utf8');
3. прямо в этом же окне, где выполняли только что бякап, разворачиваем базу обратно

define('CHARSET - это в самом дампере надо редактировать.

Только в вашем случае: 1. делаем на локальном компе, РЕДАКТИРУЕМ ДАМПЕР, загружаем на сервер модифицированный дампер, как написано в 2., восстанавливаем ТАМ дамп (отредактированным дампером).

BaS1S 12.12.2009 14:38

Цитата:

Сообщение от Yappie (Сообщение 655557)
Хотя во - может есть дампером способ и проще:
http://forum.typo3.biz/showthread.php?t=5720

Код HTML:

1. Бякап дампером (строка define('CHARSET', 'auto'); справляется прекрасно)
2. пишем строку define('RESTORE_CHARSET', 'forced->utf8');
3. прямо в этом же окне, где выполняли только что бякап, разворачиваем базу обратно

define('CHARSET - это в самом дампере надо редактировать.

Только в вашем случае: 1. делаем на локальном компе, РЕДАКТИРУЕМ ДАМПЕР, загружаем на сервер модифицированный дампер, как написано в 2., восстанавливаем ТАМ дамп (отредактированным дампером).


Теперь вообще буквы изчезли.:D
ПС: создавать бэкап на локалке неизменёным дампером?

Добавлено через 50 минут
Странно как-то. Проделал обычные действия на локалке - перенёс базу - всё работает как часы. Но как только пытаюсь сделать что-то с хостом - вопросы.

Добавлено через 15 часов 25 минут
Спасибо, Yappie, за советы. Проблема решилась после написания в службу поддержки хоста.

Yappie 12.12.2009 14:41

Не за что :) Проблему-то поддержка решила :)


Часовой пояс GMT +3, время: 21:44.

Работает на vBulletin® версия 3.8.7.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
SAPE.RU — система купли-продажи ссылок с главных и внутренних страниц сайтов.