Программирование игр, создание игрового движка, OpenGL, DirectX, физика, форум
GameDev.ru / Программирование / Форум / Почему то не видит RU шрифт когда вытаскивает из БД

Почему то не видит RU шрифт когда вытаскивает из БД

Поделиться
OrcanПостоялецwww15 мар. 20179:48#0
Привет всем не могу найти  почему вместо русского шрифта из БД вытаскивает знаки вопроса. Вроде везде сделал как надо. Локальный хостинг  Денвер. в конфиги вписал  AddDefaultCharset utf-8. Вроде везде проставил  utf-8. Если я пишу в php файле то все русские буквы хорошо отображаются, но если я вытаскиваю из таблицы, то получаются знаки вопроса. Что делать, Как дальше жить? =)
bd | Почему то не видит RU шрифт когда вытаскивает из БД
=A=L=X=Постоялецwww15 мар. 201710:12#1
Кодировка есть еще у коннекта с базой данных как таковой (т.е. возвращая строки из таблицы СУБД конвертирует их из кодировки указанной в настройках таблицы в кодировку соединения).
Плюс кодировка есть не только у HTML-страницы как куска текста, но и у HTML-ответа как протокола взаимодействия веб-сервера и браузера (см. про header и настройки веб-сервера).

Там еще проверь всё.

eugenelozaПостоялецwww15 мар. 201710:55#2
у меня такое же было при RawByteString->UTF8 implicit conversion (да, в файле UTF8, в программе UTF8, в мемо текст грузится как читабельный текст, при отображении на экране - вопросики). Исправил UTF8Decode(value); но это паскалевская функция, в PHP она вроде иначе работает.

Правка: 15 мар. 2017 10:55

gmakeПостоялецwww15 мар. 201711:26#3
А у меня была тоже проблема подобная. Помогло:
http://php.net/manual/ru/mysqli.set-charset.php
TailsПостоялецwww15 мар. 201712:15#4
Сохрани php файл в кодировке utf-8.
OrcanПостоялецwww15 мар. 201712:27#5
Tails
Всмысле? Он и так в кодировке  utf-8. Где написано Строители Иваново - это написано php кодом и там нету проблем, проблемы идут когда php извлекает из бд текст на русском
ZabПостоялецwww15 мар. 201716:51#6
Где-то по дороге от базы до экрана происходит преобразование из utf8 в ansi, возникают вопросики, потому как кодовая страница не назначена (а с какой стати ее назначать, если мы никакого ansi не хотели...).
TailsПостоялецwww15 мар. 201717:17#7
Orcan
> Он и так в кодировке  utf-8.
Открой его в Notepad++ и проверь.
geletkaПостоялецwww15 мар. 201720:43#8
Если про php советую поставить кодировку utf8 без BOM, в базе данных на саму таблицу (не на поля) тоже на всякий повесить кодировку по умолчанию utf8_general_ci
Так это еще и денвер - крайне плачевно, не стоит этим пользоваться. Если под виндой и денвер, может быть полная каша и несоответствие на реальном хостинге
VitorioПостоялецwww16 мар. 20176:16#9
=A=L=X=
> Кодировка есть еще у коннекта с базой данных как таковой
+1. Скорее всего в этом дело

>Так это еще и денвер - крайне плачевно, не стоит этим пользоваться.
Нормальный инструмент. Давно его использую под Windows - полет нормальный.

Orcan
Вот фрагмент кода, который подключается к БД и устанавливает нужную кодировку.

  $this->handle = mysql_connect ($host, $user, $password) or $this->fail();
  mysql_select_db ($database, $this->handle) or $this->fail();
  mysql_query("set character set $charset"); 
  mysql_query("set names $charset"); 
ChupakaberПостоялецwww16 мар. 201713:32#10
Vitorio
> mysql_query("

тс использует mysqli драйвер, но направление верное

тс, ещё есть такие настройки как кодировка клиента, подключения и результатов
все они должны совпадать если нет каких-то особых извращений в уже записанных данных в базу

SET character_set_client = кодировка;
SET character_set_results = кодировка;
SET character_set_connection = кодировка;

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

$q = mysqli_query("SHOW VARIABLES LIKE 'character%';");
echo "<table>";
while($r = mysqli_fetch_assoc($q))
{
  echo "<tr><td>".$r['Variable_name']."</td><td>".$r['Value']."</td></tr>";
}
echo "</table>";

насколько помню, в денвере по умолчанию latin1 стоит и из-за этого могут быть вопросики вместо буков
если так, то я бы на твоем месте базу снес и пересоздал с кодировкой utf8_general_ci (или cs, по желанию) и использовал запрос SET NAMES utf8 после подключения в php


UPD: это я к тому, что у таблиц может быть одна кодировка, у полей другая (как ты показал utf8_general_ci), а у базы вообще третья и все они влияют на результат, если не заметил - на скрине ты показал кодировку сравнения полей, она никак не связана с кодировкой самих данных, это используется только при обработке запросов со сравнением типа LIKE

Правка: 16 мар. 2017 13:35

ChebПостоялецwww16 мар. 201713:50#11
1. Не забыл закомментировать
#AddDefaultCharset windows-1251
?

2. Вписал куда надо - т.е. denwer\usr\local\apache\conf\httpd.conf ?

(а вообще php это как рыбе зонтик, влияет только на статические html страницы)


3. php файл *точно* утф-8?

4. Не забываешь header('Content-type: text/html; charset=utf-8'); ?

>базу снес и пересоздал с кодировкой utf8_general_ci
Или выставить её каждой таблице по отдельности

Всю жизнь пользуюсь денвером, единственное что надо - каждой базе данных при создании не забыввать прописать утф-8.

5. Попробуй в начале php кода
mb_internal_encoding("UTF-8");

/ Форум / Программирование игр / Веб

2001—2017 © GameDev.ru — Разработка игр