Автор Тема: Mysql -> php - Проблем с енкодинга  (Прочетена 2350 пъти)

RedIce

  • Напреднали
  • *****
  • Публикации: 162
    • Профил
Така, като за начало, съм начинаещ с PHP-то (вече 3 год, ама не ми остава време да го захапя по сериозно), но горедоло се справям за това което ми трябва.

Проблема който имам, мисля че става ясен от заглавието на темата, имам данни на кирилица в MySQL и правя най-елементарна заявка за да ми ги визуализира, и ми излизат само ???????????, коалиците съм ги настроил, като ползвам други готови скриптове нямам този проблем, като се опитам да визаулизирам данните по друг начин нямам проблем, но с най обикновен php скрипт и почва да се дъни...
какво ли не тесвах не става :(
пробвах и с phpadmin, няма проблеми, визуализира си данните правилно, ако имаше проблеми и там щеше да се издъни.

Ползвам:
Slackware 10.2 - up to 11.0
mysql  Ver 14.12 Distrib 5.0.24a
httpd Server version: Apache/1.3.37 (Unix)
PHP 5.1.6 (cli)


Примерен код
<?php
$conn = mysql_connect("localhost", "user", "pass");

if (!$conn) {
echo "Unable to connect to DB: " . mysql_error();
exit;
}

if (!mysql_select_db("db")) {
echo "Unable to select mydbname: " . mysql_error();
exit;
}

$sql = "SELECT blablabla WHERE blabla ";

$result = mysql_query($sql);

if (!$result) {
echo "Could not successfully run query ($sql) from DB: " . mysql_error();
exit;
}

echo $row["subject"];
echo '<br>';
echo $row["info"];
echo '<br>';
}
mysql_free_result($result);



Така, какво греша и каво пропускам....
пробвах да сложа и html код и да сетна енкодинга, но нямаше ефект :)



Активен

Hapkoc

  • Напреднали
  • *****
  • Публикации: 2117
    • Профил
Mysql -> php - Проблем с енкодинга
« Отговор #1 -: Dec 19, 2006, 12:30 »
Каква кодировка изпраща web сървъра? (AddDefaultCharset?)
Активен

RedIce

  • Напреднали
  • *****
  • Публикации: 162
    • Профил
Mysql -> php - Проблем с енкодинга
« Отговор #2 -: Dec 19, 2006, 12:37 »
Цитат
default_charset   no value   no value


това е от phpinfoto
в httpd.conf нямам подобна опция,
опитвал съм се да променям charseta в php.ini
но нямаше ефект

както и да е,
защо всички други скриптове работя/форуми, статистики, и други бози/, които ползвам на готово, а този най-елементарен не иска, сигорно трябва да има нещо...
Активен

lisik

  • Напреднали
  • *****
  • Публикации: 153
  • Distribution: Kubuntu
  • Window Manager: KDE
    • Профил
    • WWW
Mysql -> php - Проблем с енкодинга
« Отговор #3 -: Dec 19, 2006, 16:04 »
Цитат (RedIce @ Дек. 19 2006,13:37)
Цитат
default_charset   no value   no value


това е от phpinfoto
в httpd.conf нямам подобна опция,
опитвал съм се да променям charseta в php.ini
но нямаше ефект

както и да е,
защо всички други скриптове работя/форуми, статистики, и други бози/, които ползвам на готово, а този най-елементарен не иска, сигорно трябва да има нещо...

първо за каква кирилица говорим? utf8 или за cp1251.
Ползвай utf8 ако не е твърде късно '<img'>
Ако си конфигурирал базите данни/таблитите/полетата в MySQL и AddDefaultCharset Apache за utf8 няма да имаш проблем.
За Apache ... даже и да си указал в хтмла utf-8 ако апача не е с AddDefaultCharset utf8 пак ще ти го дава като ISO-8859-1 щото това е по подразбиране в апач. Щом ти липсва AddDefaultCharset в httpd.conf сложи си.
Колацията в MySQL слагам на utf8_general_ci и нямам проблем.
Активен

Warstomp

  • Напреднали
  • *****
  • Публикации: 344
  • Distribution: Debian, Ubuntu
    • Профил
Mysql -> php - Проблем с енкодинга
« Отговор #4 -: Dec 19, 2006, 16:27 »
Примерен код
<?php

// Connection:
//define ('dbhost','localhost');
//define ('dbuser','****');      // Попълнете Вашият потребител за базата данни
//define ('dbpass','****');   // Попълнете Вашата парола за базата данни
//define ('dbname','****');   // Попълнете името на Вашата база данни

$conn = mysql_connect (dbhost, dbuser, dbpass)
   or die ('Could not connect to the database; ' . mysql_error());

mysql_select_db (dbname, $conn)
   or die ('Could not select database; ' . mysql_error());

// Seting correct encoding:
$sql_setname = "SET NAMES cp1251";
$query_setname = mysql_query($sql_setname) or die("Query failed : " . mysql_error());
?>


Ето моя файл за връзка към базата с данни. Обърни внимание на последните 2 реда. Мисля че ще ти помогнат. Успех.
Активен

PsYhLo

  • Напреднали
  • *****
  • Публикации: 83
    • Профил
    • WWW
Mysql -> php - Проблем с енкодинга
« Отговор #5 -: Dec 19, 2006, 16:35 »
добави това към конфигурационния файл на MySQL-а
Примерен код
init_connect = 'SET NAMES utf8'

utf8 го замени със енкодинга който ти използваш и не би трябвало да имаш повече такъв проблем

по този начин си оправям аз проблема когато си преинсталирам машината и ми прави такива мизерии '<img'>
Активен

"A computer terminal is not some clunky old television with a
typewriter in front of it. It is an interface where the mind and
body can connect with the universe and move bits of it about."
                            Douglas Adams from Mostly Harmless

Йордан

  • Напреднали
  • *****
  • Публикации: 1451
  • Distribution: Ubuntu / Gentoo
  • Window Manager: Gnome
  • не е важно колко ти е голяма пишката, а какво можеш с нея
    • Профил
    • WWW
Mysql -> php - Проблем с енкодинга
« Отговор #6 -: Dec 19, 2006, 16:52 »
$this->query(”SET NAMES cp1251&#8243'<img'>;
Активен

Всеки пост - отговор на въпрос !!!

Йордан Георгиев
http://ygeorgiev.net/

lisik

  • Напреднали
  • *****
  • Публикации: 153
  • Distribution: Kubuntu
  • Window Manager: KDE
    • Профил
    • WWW
Mysql -> php - Проблем с енкодинга
« Отговор #7 -: Dec 19, 2006, 17:12 »
за set names. това е крайна мярка когато нещата са се оплескали или не са под твой контрол. Ако всичко е наред не се налага употребата му.
Активен

RedIce

  • Напреднали
  • *****
  • Публикации: 162
    • Профил
Mysql -> php - Проблем с енкодинга
« Отговор #8 -: Dec 19, 2006, 18:15 »
според мен и AddDefaultCharset е малко крайна мярка, защо всичко друго работи а моето не
това беше идеята...
коалиците непоня дали ги правих на UTF-8, на 1251 са, но както казах, дразня се че навсякаде ги визуализира но не и в моя код, ако имаше проблеми с визуализацията или някакви донатсройки от апаче/пхп, зящо тогава пхпадмина ми визуализира правилно нещата '<img'>

ще пробвам и номерът на MaX_Ass, но утре...
преди секунди тествах един гуиде за инсталация на qmail с разните му модули,
http://mirror.netforce-is.nl/pub...._2.html
и накрая така се бях отнесал, защото ме занимаваха и с други глупости.... и стигнах до един много весел ред:

mv /usr/lib /usr/lib.old
mv /usr/bin /usr/bin.old
mv /usr/sbin /usr/sbin.old
chmod 0 /usr/sbin.old
chmod 0 /usr/bin.old
chmod 0 /usr/lib.old

още ме е яд как можаг да направя подобна глупост, и то без да се замисля....
утре ще ида и ще го фиксна локално......
....
баси подобна глупост никога не съм правил, това ще ми държи влага много време напред '<img'>



Активен

Hapkoc

  • Напреднали
  • *****
  • Публикации: 2117
    • Профил
Mysql -> php - Проблем с енкодинга
« Отговор #9 -: Dec 19, 2006, 19:01 »
Стават такива работи като бърза човек. :)
Активен

lisik

  • Напреднали
  • *****
  • Публикации: 153
  • Distribution: Kubuntu
  • Window Manager: KDE
    • Профил
    • WWW
Mysql -> php - Проблем с енкодинга
« Отговор #10 -: Dec 20, 2006, 11:19 »
Цитат (RedIce @ Дек. 19 2006,19:15)
според мен и AddDefaultCharset е малко крайна мярка, защо всичко друго работи а моето не

Отново за AddDefaultCharset.
защо я има тази директива? повечето хора като пишат хтмл не не се занимават с HTTP хедъри.
Тази дирекрива котролира енкодинга направо от хедъра и с нея се съобразяват браузърите.
например конфигурацията по подразбиране на апач в дебиан/убунту и др.
Примерен код

# Default charset to iso-8859-1 (http://www.apache.org/info/css-security/). <--  Причината за тази настройка

AddDefaultCharset on

при това положение със следния хтмл
Примерен код

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>

<head>
   <meta http-equiv="Content-Type" content="text/html; charset=utf-8">

ще има проблем с кирилицата. Решението е AddDefaultCharset или го правиш на утф8 или го изключваш с Офф.
В слакуер обаче AddDefaultCharset не е зададено което е равно на AddDefaultCharset Off защото това е по подразбиране.
Затова ми се струва че проблема ти е в таблицата. Поне можеш да елиминираш апача като източник на проблема с проста проверка.
Тези програми за които говориш просто имат добре направени дб/таблици и по-малко вероятно да си слагат хедъри. Направени са да работят на всякъде '<img'>
Проблем който ми се е случвал в не-утф8 таблица да има вкарани утф8 данни тогава set names помага но по-добре е да се оправи таблицата.
дай инфо за таблиците ти
Активен

RedIce

  • Напреднали
  • *****
  • Публикации: 162
    • Профил
Mysql -> php - Проблем с енкодинга
« Отговор #11 -: Dec 20, 2006, 21:23 »
тъкмо сядам на пц, след вчерашният инцидент, системата ми е он-лине и продъжавам с php експериментите (по късно ще оправям маила)...

понеже таблицата е малка (за сега), ще направя един дъмп за да се види всичко....

Примерен код
- --------------------------------------------------------

--
-- Структура на таблица `main`
--

CREATE TABLE `main` (
  `id` smallint(5) NOT NULL auto_increment,
  `userid` smallint(3) NOT NULL COMMENT 'Юзър ID',
  `user_type` smallint(2) NOT NULL,
  `subject` varchar(50) character set utf8 collate utf8_unicode_ci NOT NULL COMMENT 'тема',
  `date` timestamp NOT NULL default '0000-00-00 00:00:00' on update CURRENT_TIMESTAMP,
  `text` varchar(5000) character set utf8 collate utf8_unicode_ci NOT NULL COMMENT 'инфо',
  `country` varchar(20) character set utf8 collate utf8_unicode_ci NOT NULL COMMENT 'Държава',
  PRIMARY KEY  (`id`),
  KEY `subject` (`subject`)
) ENGINE=MyISAM  DEFAULT CHARSET=cp1251 COLLATE=cp1251_bulgarian_ci AUTO_INCREMENT=8;

--
-- Дъмп (схема) на данните в таблицата `main`
--

INSERT INTO `main` (`id`, `userid`, `user_type`, `subject`, `date`, `text`, `country`) VALUES
(6, 1, 2, 'тест', '2006-12-20 21:20:15', 'Здрасти, как сте', 'България'),
(7, 2, 2, 'тест 2', '2006-12-20 21:20:15', 'Добре сме', 'Англия');


В момента, коалицията ми е: utf8_unicode_ci, но това го направих преди малко за тест, иначе до преди малко ми беше:cp1251_bulgarian_ci

---
иска ми се да намеря решение, без да пипап httpd.conf, защото утре ще ми се наложи да направя нещо до което нямам достъп и.....

============
ЕДИТ:

Номерът със SET NAMES проработи (по медтода на Max_Ass)...
все пак ако имате други предложения слушам '<img'>



Активен

Hapkoc

  • Напреднали
  • *****
  • Публикации: 2117
    • Профил
Mysql -> php - Проблем с енкодинга
« Отговор #12 -: Dec 23, 2006, 13:02 »
Добре де, ако проблема е в кодировката, която праща (или не праща) apache, това може да се реши ей така:

<?php
  header("Content-type: text/html; charset=windows-1251");
?>
Активен

RedIce

  • Напреднали
  • *****
  • Публикации: 162
    • Профил
Mysql -> php - Проблем с енкодинга
« Отговор #13 -: Dec 30, 2006, 07:21 »
Цитат (Hapkoc @ Дек. 23 2006,14:02)
Добре де, ако проблема е в кодировката, която праща (или не праща) apache, това може да се реши ей така:

<?php
  header("Content-type: text/html; charset=windows-1251");
?>

Нищо не прави това....
/бях убеден в това, но все пак го тествах/

това играе роля само HTML-то, тоест за вече генераната страница, просто казва на браузара каква кодировка да използва, нищо повече, а в гореописаният случай, проблема е малко по първичен, и проблема не е с браузара.

Както каза вече, SET NAMES свърши работа...
Активен

lisik

  • Напреднали
  • *****
  • Публикации: 153
  • Distribution: Kubuntu
  • Window Manager: KDE
    • Профил
    • WWW
Mysql -> php - Проблем с енкодинга
« Отговор #14 -: Dec 30, 2006, 19:28 »
Цитат (RedIce @ Дек. 20 2006,22:23)
тъкмо сядам на пц, след вчерашният инцидент, системата ми е он-лине и продъжавам с php експериментите (по късно ще оправям маила)...

понеже таблицата е малка (за сега), ще направя един дъмп за да се види всичко....

Примерен код
- --------------------------------------------------------

--
-- Структура на таблица `main`
--

CREATE TABLE `main` (
  `id` smallint(5) NOT NULL auto_increment,
  `userid` smallint(3) NOT NULL COMMENT 'Юзър ID',
  `user_type` smallint(2) NOT NULL,
  `subject` varchar(50) character set utf8 collate utf8_unicode_ci NOT NULL COMMENT 'тема',
  `date` timestamp NOT NULL default '0000-00-00 00:00:00' on update CURRENT_TIMESTAMP,
  `text` varchar(5000) character set utf8 collate utf8_unicode_ci NOT NULL COMMENT 'инфо',
  `country` varchar(20) character set utf8 collate utf8_unicode_ci NOT NULL COMMENT 'Държава',
  PRIMARY KEY  (`id`),
  KEY `subject` (`subject`)
) ENGINE=MyISAM  DEFAULT CHARSET=cp1251 COLLATE=cp1251_bulgarian_ci AUTO_INCREMENT=8;

--
-- Дъмп (схема) на данните в таблицата `main`
--

INSERT INTO `main` (`id`, `userid`, `user_type`, `subject`, `date`, `text`, `country`) VALUES
(6, 1, 2, 'тест', '2006-12-20 21:20:15', 'Здрасти, как сте', 'България'),
(7, 2, 2, 'тест 2', '2006-12-20 21:20:15', 'Добре сме', 'Англия');


В момента, коалицията ми е: utf8_unicode_ci, но това го направих преди малко за тест, иначе до преди малко ми беше:cp1251_bulgarian_ci

---
иска ми се да намеря решение, без да пипап httpd.conf, защото утре ще ми се наложи да направя нещо до което нямам достъп и.....

============
ЕДИТ:

Номерът със SET NAMES проработи (по медтода на Max_Ass)...
все пак ако имате други предложения слушам '<img'>

здр копирах дословно това за таблицата пуснах го без проблем . макар това за двата вида колации да е странно cp-1252 и utf8. все пак може да решиш кое да е от двете. единственото което направих с пхп кодати от предната страница е че му сложих
Примерен код
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
в хтмла и така си работи без никакви set names.



Активен

Подобни теми
Заглавие Започната от Отговора Прегледи Последна публикация
MySql малък проблем.
Хардуерни и софтуерни проблеми
Marto 6 2451 Последна публикация Sep 25, 2002, 12:32
от
mysql въпрос
Настройка на програми
dumi 0 1011 Последна публикация Oct 08, 2003, 06:42
от dumi
Perl + CGI,DBI + Mysql ili PHP + Mysql
Общ форум
jica 3 3413 Последна публикация Sep 07, 2004, 17:02
от jica
Mysql проблем със стартирането(mysql.sock missing)
Настройка на програми
coveka 6 5051 Последна публикация Mar 01, 2008, 22:02
от coveka
Mysql: can't connect to local mysql server
Настройка на програми
wonder 1 3680 Последна публикация Mar 16, 2008, 01:17
от neter