Linux за българи: Форуми

Програмиране => Web development => Темата е започната от: Gloxi в Feb 12, 2007, 11:24



Титла: Проблем с енкодинга в mysql
Публикувано от: Gloxi в Feb 12, 2007, 11:24
Здравейте,

правя една страница на PHP, Smarty и Mysql. Искам да я подкарам с utf8 енкодинг, но не се получава. Четох темите във форума, свързани с енкодинга, но решение за проблема ми не намерих (или не съм го видяла ;) )

Таблицата е следната:
CREATE TABLE s_districts (
        disID int(9) NOT NULL  auto_increment,
        disName varchar(40) character set utf8 collate utf8_general_ci NOT NULL,
        PRIMARY KEY (disID)
) ENGINE = MYISAM;

В кода ,след като се вържа към mysql-a, първото нещо което правя, е

$sql = "SET NAMES UTF8";
        $quere = mysql_query($sql) or die("Query failed: " . mysql_error());

Ето и част от header-a, който изпращам:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

В резултат на всичко енкодинга на страницата е Cyrillic(windows-1251), надписите на полетата са на кирилица, но съдържанието им е маймуници.

Най-вероятно проблемът за някой може да е глупав и лесно разрешим, но аз не откривам решението. Така че бъдете така добри да ми отговорите, ако може по-подробно :)

Mysql 4.1.14
PHP 4.4.0
Slackware 10.2


Титла: Проблем с енкодинга в mysql
Публикувано от: neter в Feb 12, 2007, 11:43
А ако смениш ръчно от браузъра енкодинга да бъде UTF-8, какво става?


Титла: Проблем с енкодинга в mysql
Публикувано от: Gloxi в Feb 12, 2007, 11:48
Статичният текст на страницата излиза като квадратчета, а данните от mysql-a като маймуница


Титла: Проблем с енкодинга в mysql
Публикувано от: PAIN1 в Feb 12, 2007, 19:28
Струва ми се излишно куерито със сетване на утф8.

Как пълниш информацията, в смисъл през форма или ръчно от файл. Да не се получава така да инсъртваш едно кодиране, а да изискваш друго.


Титла: Проблем с енкодинга в mysql
Публикувано от: Somma в Feb 13, 2007, 12:38
Цитат
$sql = "SET NAMES UTF8";
        $quere = mysql_query($sql) or die("Query failed: " . mysql_error());
Пробвай следното:

mysql_query ('SET NAMES UTF8', $yourDB);
mysql_query ('SET COLLATION_CONNECTION=UTF8_GENERAL_CI', $yourDB);

Вчера, като манна небесна, прочетох поста на dayassen от предишната по въпроса, и така както тои го е описал (по-горе) стана както трябва! Остава въпросът „Защо PHP парсера е направен така идиотски?”, че да е нужно всеки път да пиша тия редове! <!--emo&:(--><img src="http://www.linux-bg.org/iB_html/non-cgi/emoticons/sad.gif" border="0" valign="absmiddle" alt=':('><!--endemo-->

Успех! :B

p.s. Header-a си ти е наред! Само 2-рия ред от по-горните изпускаш!

P.S.p.s. За базата нещата са си така, т.е. проблема е в PHP!


Титла: Проблем с енкодинга в mysql
Публикувано от: Gloxi в Feb 13, 2007, 16:18
Мерси на всички за съветите, но PAIN1 налучка проблема. Вкарвам данните от файл. Проблемът е, че като си настройвах системата, не можах да накарам конзолата да бачка със utf-8 шрифт. Проблемът си остана и забравих за него - използвам windows-1251, за да пиша на кирилица. Явно, за да проработи, ще трябва да остраня и този проблем.


Титла: Проблем с енкодинга в mysql
Публикувано от: PAIN1 в Feb 13, 2007, 21:11
Дано съм бил от полза :)


Титла: Re: Проблем с енкодинга в mysql
Публикувано от: angie_bg в Jan 22, 2009, 15:00
Къде хостваш страницата?
Преди време имах подобни проблеми (със статична страница) с hit.bg - поддържат само ср-1251, каквото и др. кодиране да се зададе в хедъра, не се приема и всичко излиза на маймуница. Провери в тази посока. Успех!


Титла: Re: Проблем с енкодинга в mysql
Публикувано от: tyuio в Jan 22, 2009, 19:02
Все още не разбирам причината поради която щом си определила в главата на документа енкодинга да е утф8, браузера да я вижда уин-1251. После какъв е енкодинга на самата наза данни не на таблицата. Както каза нетер пробваи повечето възможни кодировки от браузера дали може да разберем кой е все пак енкодинга. После ако имаш phpmyadmin виж дали той вижда коректно данните в таблиците ти. На мен лично само веднъж ми се е случвало такова нещо на един безплатен хостинг каквато и кодировка да задавам все цп1251 виждаше после се оказа че самия хостинг не поддържа утф8 но това е друга изтория.


Титла: Re: Проблем с енкодинга в mysql
Публикувано от: tyuio в Jan 22, 2009, 19:16
опаааа два пъти


Титла: Re: Проблем с енкодинга в mysql
Публикувано от: DNAeon в Jan 22, 2009, 19:50
Здравей,

Като за начало, защо просто не си направиш цялата база данни с UTF-8 encoding?

Ето ти пример, как можеш да си направиш базата данни:
Код:
CREATE DATABASE s_disctricsts_db DEFAULT CHARACTER SET utf8;

И таблицата в базата:
Код:
CREATE TABLE s_districts (
        disID int(9) NOT NULL  AUTO_INCREMENT PRIMARY KEY,
        disName varchar(40) NOT NULL
) ENGINE = MYISAM;

Аз лично си пиша функции, които да инициализират винаги базата данни преди да правя каквото и да било с тях. Ето ти и една примерна функция за инициализиране на базата:

Код:
function Init_www_db (&$your_db)
{
      /* промени си само настройките за базата данни */
      $your_db_host = 'localhost';
      $your_db_port = '3306';
      $your_db_name = 'database_name';
      $your_db_user = 'your_user';
      $your_db_pass = 'your_password';

      /* свързване с базата */
      $articles_db = mysql_connect ("your_db_host:$your_db_port", $your_db_user, $your_db_pass);
      $articles_db_selected = mysql_select_db ($your_db_name, $your_db);
      if (!$articles_db || !$articles_db_selected) {
         echo 'Не мога да се свържа с базата данни в момента. Моля опитайте по-късно.';
         exit (1);
      }

      mysql_query ('SET NAMES UTF8', $your_db);
}

И един въпрос - защо използваш Mysql 4.1.14 и PHP 4.4.0? За PHP 4.x вече няма поддръжка, най-добре си обнови php до по-нова версия.

Поздрави!