Сделал первый блок на странице, в нем текст.
Текст с левой стороны берется из БД mysql.
Текст справа написан в tpl-шаблоне Smarty.
- Странички
php, tpl созданы в UTF-8 без BOM.
- meta тег установлен на UTF-8
- в .htaccess добавлен AddDefaultCharset UTF-8
-
mysql база в utf кодировке
Подскажите плиз, почему такая проблема?
p.s. как тут делать правильный спойлер?
upd: Причем, если поменять Themes и Answers на Темы и Ответы, то проблема остается, слева кракозябры, справа - нормально.
Спустя 14 минут, 18 секунд (4.06.2011 - 12:57) Rigel написал(а):
Если в htaccess убрать строку "AddDefaultCharset UTF-8", то получается обратное
Скрытый текст |
|
Спустя 3 минуты, 57 секунд (4.06.2011 - 13:01) Игорь_Vasinsky написал(а):
Спустя 2 минуты, 43 секунды (4.06.2011 - 13:04) Rigel написал(а):
Игорь_VasinskyСпасибо
а это надежный способ?
Иначе никак?
Просто текст выводиться в smarty шаблоне, iconv не получится
Спустя 14 минут, 16 секунд (4.06.2011 - 13:18) Игорь_Vasinsky написал(а):
да. функция работает замечательно
другого не предложу.
Спустя 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Спасибо, помогло!
Спустя 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м наоборот. Я предположил что все данные из БД. Щас тока въехал что "просмотров" - это в шаблоне
Спустя 1 секунда (4.06.2011 - 13:51) Rigel написал(а):
Чтобы не создавать еще одну тему, спрошу здесь :)
в БД в таблице категории у меня 4 строки:
id catname1 Общий
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поменял - то же самое
Спустя 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все, понял, большое спасибо за разъяснения