Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/6: Рейтинг темы: голосов - 6, средняя оценка - 4.50
9 / 9 / 5
Регистрация: 14.01.2015
Сообщений: 173
1

Кодировка раз и навсегда

10.04.2015, 19:21. Показов 1215. Ответов 2
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте.
В общем проблема такая. Есть html файл с формой, данные которой отсылаются на обработчик.php.
Этот php файл обрабатывает sql запрос (к БД) из формы, и возвращает результат тут же.
В html объявлена кодировка через meta-тег. Все php файлы (сам обработчик, и подключаемые к нему файлы) имеют кодировку utf-8. Подключаемая БД имеет такую же кодировку.
В общем все как положено.
В php файлах есть текст ошибок. Например, что-то типа такого:
PHP
1
2
3
4
5
...
if (!(mysqli_connect(хост, пользователь, пароль, бд)) {
echo "<p>Подключение не удалось!</p>";
}
...
проблема в том, что вот этот самый текст "Подключение не удалось!" выводится всякими символами.

самое интересное, что если вызвать
PHP
1
mysqli_character_set_name();
в ответ получаем что кодировка .... latin1
А если попытаться сделать такое
PHP
1
mysqli_set_charset();
то кодировка то устанавливается нужная, а текст ошибки опять выводится символами!

Еще один момент, если через ПКМ посмотреть "Информация о странице", то кодировка файла обработчик.php.... cp-1251!!! Как так, если файл в utf-8?

Эту проблему можно решить, если добавить к php файлу
PHP
1
header('Content-Type: text/html;charset=utf-8');
или в .htaccess прописать
PHP
1
AddDefaultCharset utf-8
Но эти варианты не очень подходят, т.к. они ну как бы не слишком гибкие, что ли...
я так понимаю, что заголовок запроса браузер посылает НЕ в utf-8?

Собственно вопросов по этому поводу два
1. в чем причина, почему так происходит, ведь все файлы и бд в нужной кодировке.
2. как раз и навсегда установить при создании БД/подключении к бд кодировку, чтобы не мучаться с приведенными чуть выше способами?


п.с. кстати, в БД нет таблиц - но это не должно влиять по моему, если, к примеру, не удалось подключиться к бд - и нужно вывести текст ошибки

Добавлено через 7 минут
п.с. на всякий случай: текст выводится в самом обработчик.php (см. код выше)
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
10.04.2015, 19:21
Ответы с готовыми решениями:

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

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

Разгон один раз и навсегда или когда нужно?
Здравствуйте. Хочу взять процессор AMD FX-8300. Все говорят, что его нужно разгонять. Никогда...

Можно ли избавиться раз и навсегда от рефспама Google Analytics?
Каждый день в аналитике всплывают &quot;левые&quot; сайты типа semalt.com semalt.semalt.com...

2
Эксперт PHP
5753 / 4133 / 1507
Регистрация: 06.01.2011
Сообщений: 11,276
10.04.2015, 19:45 2
Цитата Сообщение от Goldsilver Посмотреть сообщение
Как так, если файл в utf-8?
Я думаю, если всё действительно так, как Вы говорите - проблема в том, что сервер отсылает свои данные о кодировке.
Вот это решение нормальное:
PHP
1
AddDefaultCharset utf-8
Для всех файлов задаёт кодировку разом, не нужно писать header.
1
16 / 16 / 13
Регистрация: 12.01.2014
Сообщений: 177
10.04.2015, 19:48 3
Цитата Сообщение от Goldsilver Посмотреть сообщение
2. как раз и навсегда установить при создании БД/подключении к бд кодировку, чтобы не мучаться с приведенными чуть выше способами?
Итак... Запоминаем
1) Все файлы (php html) сохранять в кодировке UTF-8(без BOM) Notepad++ в помощь или что хочешь на твой вкус. Файл-создать-делаешь кодировку-пишешь код.
2) Создать в корне сайта файл .htaccess с содержанием AddDefaultCharset UTF-8
3) В phpmyadmin (например) при создании базы, указывать кодировку utf_8_general_ci
4) Подключаться к базе так (с указанием кодировки)
PHP
1
2
3
4
5
6
7
8
9
$hostname='localhost';
$username='root';
$password='';
$basename='base';
mysql_connect($hostname, $username, $password) or die (mysql_error());
mysql_select_db($basename) or die (mysql_error());
mysql_query("set character_set_client   ='utf8'");
mysql_query("set character_set_results  ='utf8'");
mysql_query("set collation_connection   ='utf8_general_ci'");
5) В html-php (echo) использовать знакомый метатег
PHP
1
2
3
4
5
6
echo'
<!DOCTYPE html>
<html>
<head>
<title>'.$title.'</title>
<meta http-equiv=Content-Type content="text/html;charset=UTF-8">';
Всё. Да здравствует utf-8 и никаких крякозябр.
1
10.04.2015, 19:48
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
10.04.2015, 19:48
Помогаю со студенческими работами здесь

Давайте раз и навсегда разберемся с получением данных с COM порта
Я прочитал уже около 20 форумов и блогов и везде все профессора пишут о том как подключиться к COM...

Как избавиться от иконки безопасного извлечения устройства раз и навсегда?
Как избавиться от иконки безопасного извлечения устройства раз и навсегда, чтобы она исчезла совсем...

Решил чётко, раз и навсегда, определить для себя понятие функции
Решил чётко раз и навсегда определить для себя понятии функции, но столкнулся с тем, что в разных...

СпойлерА навсегда
Добрый день Подскажите понятный код спойлера чтоб открывался закрывался по клику мыши чтоб...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru