Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

2 Stron V   1 2 >  
Reply to this topicStart new topic
> [HTML][PHP]Problem z kodowaniem, jest ustawione iso-8859-2 a przeglądarka ustwia UTF
nitro11
post
Post #1





Grupa: Zarejestrowani
Postów: 60
Pomógł: 0
Dołączył: 30.08.2010

Ostrzeżenie: (0%)
-----


Witam,

Strona ma kodowanie:

  1. <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2" />


Pliki również są zakodowane w latin2 jednak po wejsciu na stronę z przeglądarki, przeglądarku zmienia kodowanie na utf-8 co
powoduje krzaki, jak zmienię w przeglądarce kodowanie na iso-8859-2 to kodowanie jest ok.

Dlaczego przeglądarka zmienia mi kodowanie ?
Go to the top of the page
+Quote Post
masiakla
post
Post #2





Grupa: Zarejestrowani
Postów: 80
Pomógł: 17
Dołączył: 4.09.2010
Skąd: far far away

Ostrzeżenie: (0%)
-----


Jaka przeglądarka ?
Jaki jest doctype tego pliku pewnie jakiś xhtml ?
Jak definiujesz całość ?

Ten post edytował masiakla 5.09.2010, 23:32:58
Go to the top of the page
+Quote Post
nitro11
post
Post #3





Grupa: Zarejestrowani
Postów: 60
Pomógł: 0
Dołączył: 30.08.2010

Ostrzeżenie: (0%)
-----


Przeglądarka: FF, OPERA, IE

To popularny skrypt TSI-G

Nagłówek:

  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
  2.  
  3. <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="pl" lang="pl">
  4.  
  5.  
  6. <meta name="Description" content="" />
  7. <meta name="Keywords" content="" />
  8. <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2" />
  9. <meta name="Distribution" content="Global" />
  10. <meta name="Robots" content="index,follow" />
  11. <meta name="copyright" content="2006-2008 TSI-G" />
  12.  
  13.  
  14. <link rel="stylesheet" href="theme/serial/style.css" type="text/css" />
  15.  
  16. <script type="text/javascript" src="js/advajax.js"></script>
  17. <script type="text/javascript" src="js/rating.js"></script>
  18.  
  19. <title>Title</title>
  20.  
  21. </head>



Na serwerze na home. gdzie mam inne ustawienie kodowania w bazie wszystko jest ok, ale na dedyku
z innymi ustawieniami niż na home jest problem z kodowaniem.

Próbowałem setki razy zmieniać rożne parametry, ale bez rezultatu.

Mimo wszystko (chociaż próbowałem różnych ustawień, różnica jest tylko taka, że u mnie jest System kodowania znaków dla MySQL: UTF-8 Unicode (utf8) a na home latin-2) kodowanie w bazie chyba nie powinno zmieniać kodowania które jest ustawione w:
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2" />
a zarazem kodowania które ustawia przeglądarka ?

Ach te głupie polskie ogonki.

Czasem kilka dni trzeba kombinować co i jak a 'anglicy' mają z górki winksmiley.jpg

Ten post edytował nitro11 5.09.2010, 23:48:12
Go to the top of the page
+Quote Post
masiakla
post
Post #4





Grupa: Zarejestrowani
Postów: 80
Pomógł: 17
Dołączył: 4.09.2010
Skąd: far far away

Ostrzeżenie: (0%)
-----


Nie miewam z goła takiego problemu bo sam używam głównie utf-8, ale kiedyś miałem coś podobnego i było to z powodowane tym, że w nagłówkach odpowiedzi było podane kodowanie, które brały sobie przeglądarki, a meta olewały wprost, może i to jest tutaj problemem. Kurd enie pamiętam jak to rozwiązałem, ale coś w configu serwera chyba zmieniałem ....
Go to the top of the page
+Quote Post
everth
post
Post #5





Grupa: Zarejestrowani
Postów: 782
Pomógł: 153
Dołączył: 21.07.2010

Ostrzeżenie: (0%)
-----


Cała stronka o kodowaniu w PHPie, HTML i Bóg raczy wiedzieć w czym jeszcze. Może ci pomoże. Obstawiam headery albo mimo wszystko bazę.


--------------------
Już mi się ani wiedzieć, ani tym bardziej myśleć nie chce.
[Think different]!
Go to the top of the page
+Quote Post
nitro11
post
Post #6





Grupa: Zarejestrowani
Postów: 60
Pomógł: 0
Dołączył: 30.08.2010

Ostrzeżenie: (0%)
-----


Próbowałem zmieniać nawet kodowanie stron na utf i plików, ale nici...

Jeśli ktoś może mi powiedzieć, czy problem z kodowaniem w bazie może mieć wpływ na to, że w przeglądarkach ustawia się domyślne kodowanie
inne niż to ustawione w META byłbym bardzo wdzięczny bo nie wiem czy mam walczyć dalej z bazą, czy z czymś innym.

A może w jakiś inny sposób można wymusić kodowanie w bazie ?

Ten post edytował nitro11 6.09.2010, 00:03:30
Go to the top of the page
+Quote Post
masiakla
post
Post #7





Grupa: Zarejestrowani
Postów: 80
Pomógł: 17
Dołączył: 4.09.2010
Skąd: far far away

Ostrzeżenie: (0%)
-----


Po krótkim sprawdzeniu na serwerze mam to zrobione poprzez dodanie do configu http://httpd.apache.org/docs/2.0/mod/core....ddefaultcharset, można to tez zrobić w htaccess, jak nie masz zablokowanej możliwości zmiany tego, po więcej odsyłam do dokumentacji.

Drugi sposób, jak dla mnie trochę brutalny, ale tez może zadziałać to ręczna zmiana nagłówka Content-type wysyłanego przez serwer:
  1. header("Content-Type: text/html; charset=ISO-8859-2");


Egh niedoczytałem drugiego posta:
Cytat(nitro11)
Mimo wszystko (chociaż próbowałem różnych ustawień, różnica jest tylko taka, że u mnie jest System kodowania znaków dla MySQL: UTF-8 Unicode (utf8) a na home latin-2) kodowanie w bazie chyba nie powinno zmieniać kodowania które jest ustawione

Tak może, chodzi o to, nawet nie musi tego robić sama baza, zdarzą się też tak, że wystarczy by klient mysql miał inne kodowanie to wszystko będzie się chrzanić. Unicode polskie znaki np. zapisuje praktycznie jako dwa znaki i z tąd może być ten problem.

Ten post edytował masiakla 6.09.2010, 00:05:30
Go to the top of the page
+Quote Post
nitro11
post
Post #8





Grupa: Zarejestrowani
Postów: 60
Pomógł: 0
Dołączył: 30.08.2010

Ostrzeżenie: (0%)
-----


Czyli mam dopisać do konfiguracji msql w pliku msql.coś tam ; linijkę:
AddDefaultCharset utf-8

lub

AddDefaultCharset iso-8859-2

albo dodać
header("Content-Type: text/html; charset=ISO-8859-2");
w index.php ?

Masiakla, przeczytałem też Twojego najnowszego posta (też by mi umknął)
i skoro mówisz, że to jednak baza a skoro na home (inna konf. bazy) wszystko działało
to chyba nie ma co kombinować innego tylko robić coś bazą, ale co ?

Normalnie nie chce mi sie juz przerabic 100 plikow przez iconv bo moze zadziala sad.gif




BTW: A jak na linuxie zmienić ustawienie MySQL:
System kodowania znaków dla MySQL: UTF-8 Unicode (utf8)
(zmienić na inne kodowanie, latin2)

Z MyAdmina tego nie zrobię, ale w konf. mysql musi się jakoś dac.
Go to the top of the page
+Quote Post
masiakla
post
Post #9





Grupa: Zarejestrowani
Postów: 80
Pomógł: 17
Dołączył: 4.09.2010
Skąd: far far away

Ostrzeżenie: (0%)
-----


Adddefaultcharset to jest do konfiguracji Apache'a, w mysql można załatwić to inaczej ... sekundkę muszę znowu wleźć na serwer bo nie pamiętam.

BTW nagłówków, zobacz za pomocą livehttpheader czy innego dodatku do ff czy rzeczywiście dostajesz inny.

Przykładowe wpisy ze starego configa odnośnie kodowania w pliku my.cnf(jakbyś miał problem z wyszukaniem to możesz użyć locate my.cnf lub whereis my.cnf, powinno być w etc lub ciutkę głębiej na Fedorze było /etc/my.cnf, na Debianie mam w /etc/mysql/my.cnf).
Kod
[mysql]
character-sets-dir=utf8
default-character-set=utf8

[mysqladmin]
character-sets-dir=utf8
default-character-set=utf8

[mysqlcheck]
character-sets-dir=utf8
default-character-set=utf8

[mysqldump]
character-sets-dir=utf8
default-character-set=utf8

[mysqlimport]
character-sets-dir=utf8
default-character-set=utf8

[mysqlshow]
character-sets-dir=utf8
default-character-set=utf8

[myisamchk]
character-sets-dir=utf8

[myisampack]
character-sets-dir=utf8

[mysqld]
character-set-server = utf8
default-character-set = utf8

Tylko teraz pozostaje kwestia jak masz to w bazie .... Kodowanie oczywiście zmieniasz na swoje powyższe to tylko przykład.

Ten post edytował masiakla 6.09.2010, 00:19:24
Go to the top of the page
+Quote Post
everth
post
Post #10





Grupa: Zarejestrowani
Postów: 782
Pomógł: 153
Dołączył: 21.07.2010

Ostrzeżenie: (0%)
-----


hmm, mam rozumieć że regułka "set names MOJE_KODOWANIE" już była sprawdzana? np. dla PDO
  1. $pdo->query("SET NAMES 'utf8'");


--------------------
Już mi się ani wiedzieć, ani tym bardziej myśleć nie chce.
[Think different]!
Go to the top of the page
+Quote Post
nitro11
post
Post #11





Grupa: Zarejestrowani
Postów: 60
Pomógł: 0
Dołączył: 30.08.2010

Ostrzeżenie: (0%)
-----


Oczywiście SET NAMES bylo sprawdzane, ale nie działa.

Live Headers rzeczywiście zwraca:
Content-Type: text/html; charset=UTF-8

A nie latin2!



Dziwna sprawa,

plik w etc/mysql/my.cnf zajmuje 126 bajtow i jest tam 5 linijek exclamation.gif
(kiedys cos kombinowalem, ale przywrocilem pierwotna wersje)

Mam tam też plik my.cnf.off ktory zawiera cala konf.

O co chodzi znowu ?

W każdym razie przywrócenie oryginalnego pliku (ten z .off)
nic nie zmieniło :/
Go to the top of the page
+Quote Post
masiakla
post
Post #12





Grupa: Zarejestrowani
Postów: 80
Pomógł: 17
Dołączył: 4.09.2010
Skąd: far far away

Ostrzeżenie: (0%)
-----


Takie pytanie jakie masz zainstalowane distro ? Może to off to pozostałość po jakimś update, ja tez mam kupę plików w stylu /etc/mysql/my.cnf.dpkg-old, ale nvm. Co do nagłówka to wstaw go w miejscu w którym wiesz na pewno, że jeszcze nic nie było wysłane do przeglądarki, bo w innym przypadku możesz zobaczyć miły błąd. my.cnf chyba nie potrzebuje być jakiś olbrzymi, do końca nie wiem, aż tak nie wnikałem w konfigurację mysql, miałem jeszcze problem tylko z gigantycznymi plikami przy tabelach innodb, ale to tez prosto się rozwiązuje.

Po zmianie pliku restartowałeś serwer mysql, bo bez tego raczej nie zauważył nawet zmiany konfiguracji.

Ten post edytował masiakla 6.09.2010, 00:29:49
Go to the top of the page
+Quote Post
everth
post
Post #13





Grupa: Zarejestrowani
Postów: 782
Pomógł: 153
Dołączył: 21.07.2010

Ostrzeżenie: (0%)
-----


Najprostsze obejście - olej kodowanie ISO i wystawiaj w UTF8. Przeleć to co dostajesz na wyjściu bufora za mb_convert_encoding()
  1. echo mb_convert_encoding(ob_flush(),'UTF-8');

Drugie obejście
  1. header("Content-Type: text/html; charset=iso-8859-2");
  2. echo mb_convert_encoding(ob_flush(),'ISO-8859-2');


Ten post edytował everth 6.09.2010, 00:30:30


--------------------
Już mi się ani wiedzieć, ani tym bardziej myśleć nie chce.
[Think different]!
Go to the top of the page
+Quote Post
nitro11
post
Post #14





Grupa: Zarejestrowani
Postów: 60
Pomógł: 0
Dołączył: 30.08.2010

Ostrzeżenie: (0%)
-----


Oczywiście restartowałem mysqla smile.gif

Chłopaki naprawdę wielkie dzięki za zaangażowanie, nie spodziewałem się :]
Trochę mi zajmie sprawdzenie waszych najnowszych porad bo już późna godzina
i ledwo patrze na oczy przez to wszystko.

W każdym razie my.cnf zamieniłem na konf. którą podaliście, ale też nie zadziałało, bez zmian aarghhh....

Te ostatnie pomysly są ciekawe, może pomogą w wykryciu problemu.


Cytat(everth @ 6.09.2010, 01:29:47 ) *
Najprostsze obejście - olej kodowanie ISO i wystawiaj w UTF8. Przeleć to co dostajesz na wyjściu bufora za mb_convert_encoding()
  1. echo mb_convert_encoding(ob_flush(),'UTF-8');

Ale gdzie to wstawić w index.php po hederze (z latin2) ?
Przypominam, że strona ma kodowanie latin2 a nie utf-8 i w tym kodowaniu (wybranym z przeglądarki wszystko smiga)


MASIAKLA // Jestem początkujący i nie mam pojęcia czym jest DISTRO ale poszukam w miedzy czasie ...

Ten post edytował nitro11 6.09.2010, 00:40:25
Go to the top of the page
+Quote Post
masiakla
post
Post #15





Grupa: Zarejestrowani
Postów: 80
Pomógł: 17
Dołączył: 4.09.2010
Skąd: far far away

Ostrzeżenie: (0%)
-----


mam na myśli dystrybucję linuxa. Bo największe problemy miałem z Fedorą, między innymi z tym kodowaniem w nagłówku. Jak jesteś poczatku to pewnie nie dołączasz żadnych zewnętrznych repozytoriów, więc pomogłoby to okreslić na jakich wersjach softu pracujesz.

Ten post edytował masiakla 6.09.2010, 00:46:08
Go to the top of the page
+Quote Post
everth
post
Post #16





Grupa: Zarejestrowani
Postów: 782
Pomógł: 153
Dołączył: 21.07.2010

Ostrzeżenie: (0%)
-----


@nitro - wstaw to na końcu index.php - czyli tak:
  1. <?php
  2. // cała mechanika twojej strony
  3.  
  4. // header("Content-Type: text/html; charset=iso-8859-2"); // - tutaj opcjonalny header jak chcesz drugim sposobem
  5. echo mb_convert_encoding(ob_flush(),'UTF-8');
  6. ?>

Jeśli gdzieś odwołujesz nie poprzez index.php tylko jakiś inny plik to tam też musisz zrobić to samo. Mb_convert_encoding() jest po to żeby przekodować strumień wyjściowy i puścić go we właściwym kodowaniu - tak jest w teorii. Czy w praktyce ci zadziała to już musisz sprawdzić sam.

Ten post edytował everth 6.09.2010, 01:05:52


--------------------
Już mi się ani wiedzieć, ani tym bardziej myśleć nie chce.
[Think different]!
Go to the top of the page
+Quote Post
motyl-pl
post
Post #17





Grupa: Zarejestrowani
Postów: 294
Pomógł: 31
Dołączył: 2.04.2010

Ostrzeżenie: (0%)
-----


  1. mysql_query("SET SESSION character_set_results = 'latin2'");


Mi to zawsze pomagało tongue.gif


--------------------
Go to the top of the page
+Quote Post
nitro11
post
Post #18





Grupa: Zarejestrowani
Postów: 60
Pomógł: 0
Dołączył: 30.08.2010

Ostrzeżenie: (0%)
-----


Cytat(motyl-pl @ 6.09.2010, 02:10:25 ) *
  1. mysql_query("SET SESSION character_set_results = 'latin2'");


Mi to zawsze pomagało tongue.gif


Bez zmian...

Zmieniłem index.php na:

<
  1. ?
  2.  
  3.  
  4.  
  5. include("subheader.php");
  6. include("left.php");
  7.  
  8. bodyc();
  9. echo"<br>";
  10. if($u_wo == 1)
  11. {
  12.  
  13. menuf();
  14. echo''.$u_witam.'';
  15. menufe();
  16.  
  17. }
  18.  
  19. if($u_news_on == 1)
  20. {
  21. if($u_news_wen == 0)
  22. {
  23. include('include/news.php');
  24. }
  25. }
  26.  
  27. $link="index,";
  28.  
  29. $zapytanie = "SELECT * FROM movie WHERE active='1' ORDER by id DESC";
  30.  
  31. if(!$strona){
  32. $nr=$_GET["strona"];
  33. if($nr==0)
  34. {
  35. $nr=1;
  36. }
  37.  
  38. $strona=$nr;
  39. }
  40.  
  41.  
  42. $ile=$u_ile_w;
  43.  
  44. $start=($strona-1)*$ile;
  45.  
  46. $wykonaj = mysql_query($zapytanie) or Die("Nie działa zapytanie". $zapytanie);
  47. $ile_rek = mysql_num_rows($wykonaj);
  48.  
  49. $podstron = ceil($ile_rek/$ile);
  50.  
  51. $zapytanie.= " LIMIT $start,$ile";
  52.  
  53. $final = mysql_query($zapytanie) or Die ("Nie działa zapytanie końcowe");
  54. $i=0;
  55.  
  56. if($ile_rek>$ile)
  57. {
  58. include("podzial.php");
  59. }
  60.  
  61. while($row=mysql_fetch_array($final))
  62. {
  63.  
  64. $ress = mysql_query("SELECT id FROM komentarze WHERE movie='".$row['id']."'");
  65. $ilee = mysql_num_rows($ress);
  66.  
  67. menuf();
  68. if($i%2 == 0)
  69. {
  70. $bgc = 'class="color1"';
  71. }
  72. else
  73. {
  74. $bgc = 'class="color2"';
  75. }
  76. $i++;
  77.  
  78.  
  79. $Query='SELECT * FROM cats WHERE id='.$row['cat'].'';
  80. $result = mysql_query($Query) or die (mysql_error());
  81. while ( $roww = mysql_fetch_array($result))
  82. {
  83. $catn = $roww['name'];
  84. }
  85.  
  86. $info_movie = get_template('info_movie.tpl');
  87.  
  88. $info_movie = str_replace("{background}", $bgc, $info_movie);
  89. $info_movie = str_replace("{kategoria}", $catn, $info_movie);
  90. $info_movie = str_replace("{tytul}", $row['tytul'], $info_movie);
  91. $info_movie = str_replace("{opis}", $row['opis'], $info_movie);
  92. $info_movie = str_replace("{zasugerowal_l}", $l_v_zas, $info_movie);
  93. $info_movie = str_replace("{dodal}", $row['dodal'], $info_movie);
  94. $info_movie = str_replace("{ocena_l}", $l_v_ocena, $info_movie);
  95. $info_movie = str_replace("{ocena}", $row['ocena'], $info_movie);
  96. $info_movie = str_replace("{glosy_l}", $l_v_glosow, $info_movie);
  97. $info_movie = str_replace("{glosy}", $row['ile'], $info_movie);
  98. $info_movie = str_replace("{view_l}", $l_v_view, $info_movie);
  99. $info_movie = str_replace("{view}", $row['view'], $info_movie);
  100. $info_movie = str_replace("{komentarze_l}", $l_v_kom, $info_movie);
  101. $info_movie = str_replace("{komentarze}", $ilee, $info_movie);
  102. $info_movie = str_replace("{tytul_n}", namen($row['tytul']), $info_movie);
  103. $info_movie = str_replace("{id}", $row['id'], $info_movie);
  104. $info_movie = str_replace("{tytul}", $row['tytul'], $info_movie);
  105. $info_movie = str_replace("{img}", $row['img'], $info_movie);
  106.  
  107. echo $info_movie;
  108.  
  109. menufe();
  110. }
  111.  
  112. if($ile_rek>$ile)
  113. {
  114. include("podzial.php");
  115. }
  116.  
  117. if($u_news_on == 1)
  118. {
  119. if($u_news_wen == 1)
  120. {
  121. include('include/news.php');
  122. }
  123. }
  124.  
  125. bodyc();
  126.  
  127. include("right.php");
  128.  
  129. include("footer.php");
  130.  
  131. echo mb_convert_encoding(ob_flush(),'UTF-8');
  132.  
  133. ?>



I nic ..................
Go to the top of the page
+Quote Post
everth
post
Post #19





Grupa: Zarejestrowani
Postów: 782
Pomógł: 153
Dołączył: 21.07.2010

Ostrzeżenie: (0%)
-----


Wypróbuj ten drugi sposób (z headerem i konwersją ustawioną na iso-8859-2). Pamiętaj że kodowanie w header i meta powinno się zgadzać. Dzisiaj już raczej nic bardziej konstruktywnego nie wymyślę.


--------------------
Już mi się ani wiedzieć, ani tym bardziej myśleć nie chce.
[Think different]!
Go to the top of the page
+Quote Post
motyl-pl
post
Post #20





Grupa: Zarejestrowani
Postów: 294
Pomógł: 31
Dołączył: 2.04.2010

Ostrzeżenie: (0%)
-----


Cytat(motyl-pl @ 6.09.2010, 02:10:25 ) *
  1. mysql_query("SET SESSION character_set_results = 'latin2'");


Mi to zawsze pomagało tongue.gif


A dałeś jako utf8 czy zostawiłeś latin2 ?


--------------------
Go to the top of the page
+Quote Post

2 Stron V   1 2 >
Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 21.08.2025 - 14:24