[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Проблема с кодировкой
Rigel
Сделал первый блок на странице, в нем текст.
Текст с левой стороны берется из БД mysql.
Текст справа написан в tpl-шаблоне Smarty.

Скрытый текст
user posted image


- Странички php, tpl созданы в UTF-8 без BOM.
- meta тег установлен на UTF-8
- в .htaccess добавлен AddDefaultCharset UTF-8
- mysql база в utf кодировке

Подскажите плиз, почему такая проблема?

p.s. как тут делать правильный спойлер? rolleyes.gif

upd: Причем, если поменять Themes и Answers на Темы и Ответы, то проблема остается, слева кракозябры, справа - нормально.



Спустя 14 минут, 18 секунд (4.06.2011 - 12:57) Rigel написал(а):
Если в htaccess убрать строку "AddDefaultCharset UTF-8", то получается обратное smile.gif

Скрытый текст
user posted image

Спустя 3 минуты, 57 секунд (4.06.2011 - 13:01) Игорь_Vasinsky написал(а):
почитай про iconv();

Спустя 2 минуты, 43 секунды (4.06.2011 - 13:04) Rigel написал(а):
Игорь_Vasinsky
Спасибо smile.gif
а это надежный способ?
Иначе никак?

Просто текст выводиться в smarty шаблоне, iconv не получится unsure.gif

Спустя 14 минут, 16 секунд (4.06.2011 - 13:18) Игорь_Vasinsky написал(а):
да. функция работает замечательно wink.gif другого не предложу.

Спустя 11 минут, 21 секунда (4.06.2011 - 13:29) killer8080 написал(а):
Rigel
никакой iconv тут не нужен, очевидно что БД отдаёт данные не в той кодировке, нужно её правильно инициализировать. Сразу после mysql_select_db() нужно указать кодировку клиента и collate
mysql_query("SET NAMES utf8 COLLATE utf8_unicode_ci");

и ещё, кодировку нужно прописывать в html-е
<meta http-equiv="content-type" content="text/html; charset=utf-8" />

Спустя 4 минуты, 8 секунд (4.06.2011 - 13:34) Игорь_Vasinsky написал(а):
killer8080
посмотри на первые 2 сообщения ТС, на скриншоты.

Спустя 1 минута, 42 секунды (4.06.2011 - 13:35) Rigel написал(а):
killer8080
Спасибо, помогло! smile.gif

user posted image

Спустя 1 минута, 21 секунда (4.06.2011 - 13:37) Rigel написал(а):
Игорь_Vasinsky
просто у меня было так

function Msql($dbhost, $dbuser, $dbpass, $dbname)
{
$link = mysql_connect($dbhost, $dbuser, $dbpass) or die(mysql_error());
if(mysql_select_db($dbname, $link))
{
return true;
mysql_query("SET NAMES utf8 COLLATE utf8_unicode_ci");
}
else
{
return false;
}
}


а надо сначала отправить кодировку mysql, а потом вернуть знаечение true :) Короче я кривой :rolleyes:

Спустя 8 минут, 27 секунд (4.06.2011 - 13:45) killer8080 написал(а):
Игорь_Vasinsky
mysql отдавая данные автоматически их конвертирует, если она считает что данные хранятся в кодировке, отличной от кодировке клиента. Поэтому ей нужно явно указать collate и кодировку клиента.

Спустя 5 минут, 58 секунд (4.06.2011 - 13:51) Игорь_Vasinsky написал(а):
killer8080
согласен, сбило с толку что на первом скрине с одной стороны крякозябры - с другой нормально, на 2м наоборот. Я предположил что все данные из БД. Щас тока въехал что "просмотров" - это в шаблоне wink.gif

Спустя 1 секунда (4.06.2011 - 13:51) Rigel написал(а):
Чтобы не создавать еще одну тему, спрошу здесь :)

в БД в таблице категории у меня 4 строки:

id catname
1 Общий
2 Программы
3 Железо
4 Разное

вывожу так:
$query = mysql_query("SELECT * FROM `category`") or die(mysql_error());
while ($cat[] = mysql_fetch_array($query));
$smarty->assign('cat_array', $cat);



вывожу в шаблоне так:

{foreach from=$cat_array item=item}
<div id="category">
<div
id="cat_title"><a href="viewcat.php?id={$item.id}">{$item.cat_name}</a></div>
{foreach from=$theme_array item=item2}
{if $item2.cat eq $item.id}
<div class="theme_block"><a class="theme_link" href="viewtheme.php?id={$item2.id}&cat={$item.id}">{$item2.theme_name}</a><br />
<span
class="theme_description">{$item2.theme_description}</span>
</div>
<div
class="count_block">
Темы:
</div>
<div
class="answer_block">
Ответы:
</div>
{/if}
{/foreach}
</div>
<br />

{/foreach}



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

Спустя 5 минут, 42 секунды (4.06.2011 - 13:57) killer8080 написал(а):
используй mysql_fetch_assoc() или
while ($cat[] = mysql_fetch_array($query, MYSQL_ASSOC));

Спустя 2 часа, 36 минут, 45 секунд (4.06.2011 - 16:33) Rigel написал(а):
killer8080
поменял - то же самое sad.gif

Спустя 8 минут, 38 секунд (4.06.2011 - 16:42) killer8080 написал(а):
while ($row= mysql_fetch_assoc($query)){
$cat[] = $row;
}

Спустя 11 минут, 23 секунды (4.06.2011 - 16:53) Rigel написал(а):
killer8080
Спасибо, работает :)
А почему так нормально,
while ($row= mysql_fetch_assoc($query)){
$cat[] = $row;
}
а так
while ($cat[] = mysql_fetch_assoc($query));

выдает еще блок?

Спустя 3 минуты, 49 секунд (4.06.2011 - 16:57) killer8080 написал(а):
Потому что когда в конце mysql_fetch_assoc вернёт false, действия в скобках выполнятся не будут, а в твоём варианте в массив добавлялся ещё один элемент с false.

Спустя 3 минуты, 44 секунды (4.06.2011 - 17:01) Rigel написал(а):
killer8080
все, понял, большое спасибо за разъяснения wink.gif
Быстрый ответ:

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