Опять кодировка?

Аватар пользователя RoSk0 RoSk0 17 июля 2008 в 11:34

На сервере хостера в базе mysql 5.0.45-community данные лежат в utf8.
При просмотре содержимого таблицы из phpmyadmin все отлично, русский отображается, а когда вывожу содержимое в ноду...
Абзац в общем.
Текст перед выводом пропускаю через t() что не так?

0 Thanks

Комментарии

Аватар пользователя Raven2000 Raven2000 17 июля 2008 в 12:53

Во первых у хостинга скоре всего апачь принудительно выдает страницу в windows-1251 и тп
И далее глянь в браузере и установи просмотр с кодировкой UTF-8 если все ок то на хостинге попроси чтобы они в vhoste твоего сайта принудительно поставить вывод кодировки в UTF-8.
А лучше и прощев .htaccess в дире сайта добавь (желательно поближе к началу)
Charsetdisable On
это отрубит вывод кодировки указанной в апаче и будет тебе счастье =)

Аватар пользователя RoSk0 RoSk0 17 июля 2008 в 15:52

А еще варианты есть ?
Почему тогда интерфейс друпала нормально русский отображает? он ведь с той же базы... %)

Может код поможет:

<?php

$str=array();
$path_arr=array();
$descr_arr=array();

$connect = [user=mysql_connect]mysql_connect[/user]("mysqlhost","user","password") or die("Error connecting to database: ".mysql_error());

[user=mysql_select_db]mysql_select_db[/user]("mysqldb",$connect) or die("Error selecting database: ".mysql_error());

$query = "SELECT * FROM tricks";

$result = [user=mysql_query]mysql_query[/user]($query,$connect) or die("Error quering to database: ".mysql_error());

$num_rows = [user=mysql_num_rows]mysql_num_rows[/user]($result);

for ($i=0;$i<$num_rows;$i++){

// ++++++++++  присваиваем выбранные данные соотв переменнным___------

         $id = [user=mysql_result]mysql_result[/user]($result,$i,"id");

         $descr = [user=mysql_result]mysql_result[/user]($result,$i,"description");

         $path = [user=mysql_result]mysql_result[/user]($result,$i,"path");

         $name = [user=mysql_result]mysql_result[/user]($result,$i,"name");

         $type = [user=mysql_result]mysql_result[/user]($result,$i,"type");

         $value = [user=mysql_result]mysql_result[/user]($result,$i,"value");

/* Сразу же формируем строки для экспорта*/

$path_arr[$i]=$path."\n";
$str[$i]="\"".$name."\"=".$type.":".$value;
$descr_arr[$i]=$descr;
// +++++++++++++++++++++ закончили присваивание ------------------------------
}

$str_head="Windows Registry Editor Version 5.00\n\n";

    if (isset($_POST["all"])){
      for ($i=0;$i<$num_rows;$i++){

                $str_tmp .=$path_arr[$i] .= $str[$i].= "\n";
      }
      $str_all=$str_head.$str_tmp;

        if(isset($_SERVER['HTTP_USER_AGENT']) and strpos($_SERVER['HTTP_USER_AGENT'],'MSIE'))
        Header('Content-Type: application/force-download');
        else Header('Content-Type: application/octet-stream');

    Header('Accept-Ranges: bytes');
    Header('Content-Length: '.strlen($str_all));
    Header('Content-disposition: attachment; filename="reg_tricks.reg"');

      echo $str_all;
      exit;
     }

    for ($i=0;$i<$num_rows;$i++){

          if (isset($_POST["$i"])){
                $str_tmp .=$path_arr[$i] .= $str[$i].= "\n";
      }
    }

    if(strlen($str_tmp)>0){
          $str_exp=$str_head.$str_tmp;

        if(isset($_SERVER['HTTP_USER_AGENT']) and strpos($_SERVER['HTTP_USER_AGENT'],'MSIE'))
        Header('Content-Type: application/force-download');
        else Header('Content-Type: application/octet-stream');

    Header('Accept-Ranges: bytes');
    Header('Content-Length: '.strlen($str_all));
    Header('Content-disposition: attachment; filename="reg_tricks.reg"');

      echo $str_exp;
      exit;
    }

echo "

<P>".t("Это даже не то чтобы твики, просто вещи которыми я пользуюсь и которые, возможно пригодятся Вам")."</P>

<P>".t("Если что-то из <STRIKE>этой фигни</STRIKE> этого Вас заинтересовало - проставьте соответствующие галочки")." </P><P><B>".t("(закачивать надо браузером)")."</B></P>

<CENTER>
<FORM action='".$_SERVER["REQUEST_URI"]." 'method='POST'>
<TABLE width='80%' border=1>
<TR align='center'>
<TD width=1%><INPUT type='submit' name='all' value='Export фсё!' /></TD>
<TD width=40% ><H2><B>"
. t("Описание")."</B></H2></TD>
<TD width=60% ><H2><B>"
.t("Содержание")."</B></H2></TD>
</TR>

";

for ($i=0;$i<$num_rows;$i++){

// +++++++++++++++++++++ Выводим значения ------------------------------
echo "
<TR>
<TD width=1%> <INPUT type='checkbox' name='"
.$i."' /> </TD>
<TD width=40%>"
.t($descr_arr[$i])."</TD>
<TD width=60%>"
.$path_arr[$i]."<BR>".$str[$i]."</TD>
</TR>

";

// +++++++++++++++++++++ закончили вывод  ------------------------------

}
echo "</TABLE>
<INPUT type='submit' name='export' value='Export!' />
</FORM>
</CENTER>"
;

?>

Аватар пользователя olk olk 17 июля 2008 в 17:29

Потому что надо пользоватся друпалоским дблэером :)
ну а если хотите натиывным, то у пятого майскуля, надо принудительно выставить чарсет , что то типа
mysql_query('SET NAMES UTF8');

Аватар пользователя RoSk0 RoSk0 18 июля 2008 в 14:41
olk wrote:

Потому что надо пользоватся друпалоским дблэером :)
ну а если хотите натиывным, то у пятого майскуля, надо принудительно выставить чарсет , что то типа
mysql_query('SET NAMES UTF8');

Огромное спасибо - помогло!
Только обьясни пожалуйста по поводу лоера...
Я попытался вместо mysql_query($query) использовать db_query($query) и получил ошибку.
Как правильно использовать?

Аватар пользователя direqtor direqtor 18 июля 2008 в 5:06

А в функцию t() русский язык пихать не надо. Туда пишут по английски. Потом в поиске строк находишь нужную и переводишь на русский, тогда все нормально будет работать. Или явно указывать язык текста вторым параметром. Более того файл должен быть обязательно сохранен в формате UTF8 без сигнатуры. Иначе будут кракозябры.

Аватар пользователя RoSk0 RoSk0 18 июля 2008 в 9:59
direqtor wrote:

Более того файл должен быть обязательно сохранен в формате UTF8 без сигнатуры

Обьясните пожалуйста

Всем спасибо!
Ушел учить матчасть(http://api.drupal.ru/api/group/database/6 - я на правильном пути?)

Аватар пользователя olk olk 18 июля 2008 в 14:58

Ну я не телепат :) какую хоть ошибку и что в этот момент в переменной $query?
надеюсь вы использовали db_query в контексте друпала (т.е. или в друпаловском модули либо в сниппете) и опять же надеюсь что работаете с базой друпала ?

Аватар пользователя RoSk0 RoSk0 18 июля 2008 в 16:12
olk wrote:

Ну я не телепат :) какую хоть ошибку и что в этот момент в переменной $query?
надеюсь вы использовали db_query в контексте друпала (т.е. или в друпаловском модули либо в сниппете) и опять же надеюсь что работаете с базой друпала ?

если я правильно понимаю сниппет - это кусок кода вставленный в ноду?

Аватар пользователя RoSk0 RoSk0 21 июля 2008 в 10:10

Так, вроде разобрался...
Ну еще чуток внимания...

Что все таки лучше использовать друпаловский лоер или нативные функции?
Заранее благодарен за ответ.
Тему можно считать закрытой

Аватар пользователя olk olk 21 июля 2008 в 10:23

Ну я думаю вы уже сами знаете ответ на свой вопрос :) Если есть защищенный (в смысле со встроенной обработкой ошибок) дб лэер (причем мультибазовый) то в чем смысл использовать нативный (с учетом, что в друпале его (дб лэер) писали не новички и "обкатывается" он уже несколько лет) , ни в скорости ни в чем другом нативный не выигрывает у друпаловского, так зачем изобретать очередной трехколесный велосипед :) ?