[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: PHP5+MySQL5.1 кодировка ПАРАДОКС просто!
Meteor_IP
Создал таблицу MySQL следующим образом:

Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 9
Server version: 5.1.28-rc-community MySQL Community Server (GPL)

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.


mysql> SHOW VARIABLES LIKE '%char%';
+--------------------------+----------------------------------------------------
-----+
| Variable_name | Value
|
+--------------------------+----------------------------------------------------
-----+
| character_set_client | utf8
|
| character_set_connection | utf8
|
| character_set_database | utf8
|
| character_set_filesystem | binary
|
| character_set_results | utf8
|
| character_set_server | utf8
|
| character_set_system | utf8
|
| character_sets_dir | C:\Program Files\MySQL\MySQL Server 5.1\share\chars
ets\ |
+--------------------------+----------------------------------------------------
-----+
8 rows in set (0.05 sec)

mysql> SHOW VARIABLES LIKE '%collat%';
+----------------------+-----------------+
| Variable_name | Value |
+----------------------+-----------------+
| collation_connection | utf8_general_ci |
| collation_database | utf8_general_ci |
| collation_server | utf8_general_ci |
+----------------------+-----------------+
3 rows in set (0.00 sec)

mysql> CREATE DATABASE man;
Query OK, 1 row affected (0.02 sec)

mysql> USE man;
Database changed
mysql> CREATE TABLE people (
-> name VARBINARY(64) );
Query OK, 0 rows affected (0.09 sec)

mysql> INSERT INTO people VALUES ('Валик');
Query OK, 1 row affected (0.03 sec)

mysql> SELECT * FROM people;
+-------+
| name |
+-------+
| Валик |
+-------+
1 row in set (0.00 sec)

mysql>

Создал PHP скрипт для вывода данных с базы (создавал в Notepad ++, предварительно установил кодировку UTF-8 (без BOOM) ) :


<html>
<
head>
<
title> Вывод из базы </title>
</
head>
<
body>
<
h1> Вывод из базы </h1>
<?php
$conn = mysql_connect("localhost","root","");

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

mysql_select_db("man", $conn);
$sq1 = "SELECT * FROM people";
$result = mysql_query($sq1, $conn);
print "<table border=1>\n";
print "<tr>\n";
while ($field = mysql_fetch_field($result)) {
print "<th>$field->name</th>\n";
}
print "</tr>\n\n";

while ($row = mysql_fetch_assoc($result)) {
print "<tr>\n";
foreach ($row as $col=>$val) {
print " <td>$val</td>\n";
}
print "</tr>\n\n";
}
print "</table>\n";
?>

</body>
</
html>


Установлен сервер Apache 2.2 на этом же компьютере. При открытии в браузере показывает следующее :

а�б�аВаОаД аИаЗ аБаАаЗб�
name
� ЋЈЊ


При чем в браузере устанавливается Кириллица(ISO-8859-5) кодировка. Когда в браузере меняю вручную кодировку на Юникод (UTF-8) выдаёт следующее:

Вывод из базы
name
�����

Когда меняю вручную на Кириллица/Россия (CP-866) :

╨Т╤Л╨▓╨╛╨┤ ╨╕╨╖ ╨▒╨░╨╖╤Л
name
Валик

ЛЮДИ ДОБРЫЕ!! Ну сил просто нет уже, 4-й день мучаюсь с этими кодировками. Помогите пожалуйста!



Спустя 15 минут, 7 секунд (24.01.2010 - 16:22) Gabriel написал(а):
<html>
<
head>
<
title> Вывод из базы </title>
</
head>
<
body>

файл должен быть в кодировке utf8, также нужно поставить либо метатег который будет говорить браузеру, что тут утф8, либо послать заголовок с той же целью, а еще лучше и то и друге.

Спустя 4 часа, 46 минут, 45 секунд (24.01.2010 - 21:09) Meteor_IP написал(а):
Цитата (Gabriel @ 24.01.2010 - 13:22)
<html>
<
head>
<
title> Вывод из базы </title>
</
head>
<
body>

файл должен быть в кодировке utf8, также нужно поставить либо метатег который будет говорить браузеру, что тут утф8, либо послать заголовок с той же целью, а еще лучше и то и друге.

СПС. Установил в <head> <meta http-equiv="Content-Type" content="text/html;charset=utf-8" >

и в PHP <?php header( "Content-Type: text/html; charset=utf8" );

Браузер при запуске установил UTF-8, НО!!! данные с базы всё равно выглядят так:

Вывод из базы
name
�����

mad.gif mad.gif mad.gif

Спустя 3 минуты, 5 секунд (24.01.2010 - 21:12) Bezdna написал(а):

Спустя 21 минута, 23 секунды (24.01.2010 - 21:33) Meteor_IP написал(а):
Цитата (Bezdna @ 24.01.2010 - 18:12)
http://phpforum.ru/index.php?showtopic=17150

Спасибо. Но если ты просмотрел мой PHP-скрипт, то там прописаны строки:

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

На сколько я знаю, это одно и тоже, что и mysql_query("SET NAMES 'utf8'");
Пробовал и так и так, эффект тот же самый...



Везде пишут одно и тоже пропиши mysql_query("SET NAMES 'utf8'"); и всё будет нормально, но почему у меня не нормально??? Я полностью выложил все свои действия. Где я и что сделал не так???
Пожалуйста подскажите где ошибка sad.gif

Спустя 4 часа, 44 минуты, 10 секунд (25.01.2010 - 02:17) anonymouse написал(а):
Тоже самое словил - + не могу все файлы переделать в UTF-8 without BOM sad.gif

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


1. Та часть что не глючит - в ПХПмйАдмине - не виден русский
2. Та часть гед глучит - в БД вставить не могу русс. и ничего с ним делать... но в ПХП-Админе вижу нормально текст отчетлево...
Уже запарился...

Спустя 1 час, 7 минут, 31 секунда (25.01.2010 - 03:25) dr_Lev написал(а):
У меня тоже такая проблема была... везде стояло UTF... и тестовые данные тоже через консоль вводил... решения проблемы так и не нашел... Но когда ввел данные из пыха, все стало на свои места...
Мои догадки, что всему виной "Язык и региональные настройки" виндовза...

Спустя 1 час, 11 минут, 33 секунды (25.01.2010 - 04:36) Gabriel написал(а):
тьфу тьфу тьфу у меня с такими делами пока что все гладко smile.gif

Спустя 8 часов, 37 минут, 9 секунд (25.01.2010 - 13:13) anonymouse написал(а):
Я нашел проблему.

ПИ***ЗДЕЦ ПРОСТИТЕ МЕНЯ НО БОЛЬШЕГО БРЕДА С УТФ я не видел.
Не знаю оправдывает ли он себя после этого....


Если ты пользуешься УТФ - то очень многие фукций строковый не работают правильно.


На пример у меня была проблема в strtolower.
Он парсил мне не как простой стринг... и из за этого вылезали на половине сайта каракули.


Цитата
Проблема собственно в том, что юникодовский текст занимает больше байт, чем количество символов. Поэтому обычный substr и т.п. могут обрезать текст по служебному байту, что приводит к отображению браузером знака вопроса в конце текста. Все это не очень красиво.


Вот вам и ответ на ПОЛТЕРГЕЙСТ !


Так что проблему нужно искать на много глубже ... хз убил вчера столько времени что сегодня когда встал и посмотрел на все это... так и хочется послать куда-то это все....

Спустя 21 минута, 46 секунд (25.01.2010 - 13:35) twin написал(а):
Это не полтергейст а элементарное незнание матчасти.
Для работы с многобайтными кодировками нужно пользоваться своими функциями, которые собраны в библиотеку mb.
Так что не
Цитата
На пример у меня была проблема в strtolower

а
Цитата
На пример у меня была проблема в том, что я не знал, что нужно использовать mb_strtolower

Спустя 1 час, 38 минут, 16 секунд (25.01.2010 - 15:14) anonymouse написал(а):
twin
Согласен!!! Нечего мне возразить тебе....
Только вот... не только я об этом не знал...
Век живи век учись!

Спустя 4 дня, 22 часа, 43 минуты, 32 секунды (30.01.2010 - 13:57) Guest222 написал(а):
В итоге то, как решить эту проблему? можно хотя бы немножко подробнее? у меня тоже самое, бьюсь второй день.

Спустя 8 минут, 51 секунда (30.01.2010 - 14:06) twin написал(а):
А где проблема то?

Спустя 3 часа, 23 минуты, 58 секунд (30.01.2010 - 17:30) Guest222 написал(а):
Цитата
А где проблема то?


В базе данных mysql русские символы лежат в cp1251

'character_set_client', 'cp1251'
'character_set_connection', 'cp1251'
'character_set_database', 'cp1251'
'character_set_filesystem', 'binary'
'character_set_results', 'cp1251'
'character_set_server', 'cp1251'
'character_set_system', 'utf8'
'character_sets_dir', 'c:\Program Files (x86)\MySQL\MySQL Server\share\charsets\'

при получении строки в php

<?php
$server = 'localhost:3306';
$user = 'root';
$password = '123456';
$dblink = mysql_pconnect($server, $user, $password);

$database = 'poligon';
$selected = mysql_select_db($database, $dblink);

$sql= "SET NAMES cp1251";
$qry = mysql_query($sql, $dblink);

$sql = 'SELECT * FROM table1';
$qry = mysql_query($sql, $dblink);

$row = mysql_fetch_array($qry, MYSQL_NUM);
echo "Имя: " . $row[0];
?>


результат (кодировка браузера стоит cp1251):

user posted image

Ставлю кодировку браузера utf-8:

user posted image

Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.