PHP-Nuke
  Strona głównaDownloadForumFAQ Zaloguj się  
 Menu
 Home :
 Strona główna
 Demo PHPNuke
 Archiwum
 Użytkownicy :
 Ekipa phpnuke.org.pl
 Lista Użytkowników
 Prywatne wiadomości
 Online
 Menu :
 Regulamin
 Kontakt
 Linki
 Download
 Dokumentacja :
 FAQ
 Idiots Guide
 Polecamy
» projektowanie stron
» fotografia ślubna
» TANIE WIZYTÓWKI
» patchwork
» Nokia

» umieść tutaj swój link
 Tools
 Module Creator
 Block Creator
 HTML to PHP
 HTML to Javascript
 Online HTML Editor
 Meta Tag Creator
 Popup Creator
 Scrollbar Creator
 Hex Colors
 Previewer
 HTML Encoder
 URL Encoder
 Rot-13 Encoder
 DB Generator
 MD5 Calculator
 Top Themes
1.Tesko1015
2.BLock691
3.ICGstation565
4.Dw-Advance454
5.Fiblack3d449
6.ZoneBlue409
7.Aeolus335
8.Cobalt334
9.PH2BLUE305
10.XPMidnight299

 
Regulamin  Forum FAQ   Szukaj   Grupy   Rejestracja   Zaloguj
 
 
Zadając pytanie dotyczące PHPNuke podaj jego wersje!!

Znaki zapytania zamiast polskich liter
Jeżeli na twojej stronie, która odczytuje dane z MySQL pojawiły się znaki zapytania zamaist polskich liter (ą, ś, ć, itp.) to prawdopodobnie strona oparta na PHP-Nuke łączy się do bazy z innym zestawem znaków, jaki ma serwer, z którego korzystasz.

Podsumowując:
1) klient (PHP-Nuke) łączy sie z bazą, mając swój zestaw znaków,
2) baza danych ma również swój zestaw znaków.

Co zrobić, aby wyświetlały się polskie znaki?
Spróbuję wyjaśnić to najprościej jak mi się uda.

I. Krok pierwszy:

Wejdź do phpMyAdmina i wykonaj zapytanie SQL:

Kod:
SHOW VARIABLES LIKE "character_set%";


odczytaj wartość character_set_client, character_set_connection, character_set_database i charcter_set_server
Jeżeli wartości są takie same, to nie powinieneś mieć tego problemu, a jeśli się różnią to musimy przejść do kroku drugiego. lub trzeciego, w zależności w jakiej sytuacji jesteś.

II. Krok drugi:

1) Jeżeli nasze tabele mają inny zestaw znaków niż domyślny, który odczytaliśmy z character_set_database, to musimy:

- wymusić łączenie się z takim charsetem, jaki ma tablica, dodając po połączeniu polecenie "SET NAMES 'latin1'", gdzie 'latin1', to zestaw znaków z naszych tabelach.

Jak to zrobić?

otwieramy plik includes/sql_layer.php

Szukamy

Kod:
function sql_connect($host, $user, $password, $db)
{
global $dbtype;
switch ($dbtype) {

    case "MySQL":
        $dbi=@mysql_connect($host, $user, $password);
   mysql_select_db($db);


i dodajemy po:

Kod:
mysql_query("set names 'latin1'",$dbi);


Otwórz plik db/mysql.php

Znajdź

Kod:
mysql_connect($this->server, $this->user, $this->password);
      }
      if($this->db_connect_id)
      {
         if($database != "")
         {
            $this->dbname = $database;
            $dbselect = @mysql_select_db($this->dbname);


dodaj po:

Kod:
mysql_query("set names 'latin1'",$this->db_connect_id);


Pamiętaj, że musisz zamienić latin1, na zestaw znaków, któy mają twoje tabele

- spróbować zmienić kodowanie w tablicy, tak aby serwer nie robił "automatycznej konwersji w locie".

Zmiana kodowania w tablicy - WAŻNE!

Ponieważ nasze znaki są w tabeli jako strona kodowa domyslnej tablicy znaków w naszej bazie danych, a tabela uważa, że są one w latin1, NIE WOLNO robić zwykłej konwersji charsetu na danym polu (przez ALTER TABLE - zmiana właściwości pola)!

Trzeba z każdym polem typu text lub varchar zrobić tak, jak to niżej napisali:
Kod:

If you have a column in one character set (like latin1) but the stored values actually use some other, incompatible character set (like utf8). In this case, you have to do the following for each such column:

ALTER TABLE t1 CHANGE c1 c1 BLOB;
ALTER TABLE t1 CHANGE c1 c1 TEXT CHARACTER SET utf8;

a w naszym przypadku, zamiast uft8, będzie domyślny zestaw znaków naszej bazy danych
Kod:

ALTER TABLE t1 CHANGE c1 c1 TEXT CHARACTER SET latin2;



dla pola VARCHAR będzie to:
Kod:

ALTER TABLE t1 CHANGE c1 c1 BLOB;

ALTER TABLE t1 CHANGE c1 c1 VARCHAR(255) CHARACTER SET latin2;


Uwaga: 'latin2' musisz zmienic na swoją domyślną tablicę znaków w twoim MySQL

III. Krok trzeci:

Jeśli nasz przypadek to:
1) baza ma domyślny zestaw znaków, np. 'latin2'
2) PHP-Nuke łączy się za pomocą innego zestawu znaków, np. 'latin1' , to:

otwieramy plik includes/sql_layer.php

Szukamy

Kod:
function sql_connect($host, $user, $password, $db)
{
global $dbtype;
switch ($dbtype) {

    case "MySQL":
        $dbi=@mysql_connect($host, $user, $password);
   mysql_select_db($db);


i dodajemy po:

Kod:
mysql_query("set names 'latin2'",$dbi);


Otwórz plik db/mysql.php

Znajdź

Kod:
mysql_connect($this->server, $this->user, $this->password);
      }
      if($this->db_connect_id)
      {
         if($database != "")
         {
            $this->dbname = $database;
            $dbselect = @mysql_select_db($this->dbname);


dodaj po:

Kod:
mysql_query("set names 'latin2'",$this->db_connect_id);


gdzie musimy 'latin2' zmienić na zestaw znaków naszej bazy dnaych


Przy opracowywaniu wykorzystałem http://www.zhr.pl/info/1657

Dodał Srwsio
W większości przypadków pomaga również odnalezienie w plikach słowa
Kod:
htmlentities
i zaspąpienie go słowem
Kod:
htmlspecialchars



UPDATE:
Alternatywną metoda działającą w niektórych przypadkach (zwłaszcza opisanej powyżej drugiej sytuacji) to konwersja standardu kodowania w pliku będącym zrzutem bazy danych.

Otóż przed wykonaniem zapytań z pliku sql należy zmienić kodowanie w tym pliku na zgodne z kodowaniem jaki poznaliśmy na początku tego FAQ. Dopiero potem załadować plik do bazy danych. Do konwersji standardu kodowania polecam darmowy, polski program o nazwie GżegżółkaXP. Najczęściej konwersja powinna być wykonana na któryś z tych 3 standardów:
- IBM CP852 (Europa Środkowa)
- ISO 8859-2 (Europa Środkowa)
- Windows 1250 (Europa Środkowa)

update by Suchy

*Jaszczur
 


Powered by phpBB [CR] © 2001, 2006 phpBB Group.
 

Valid XHTML 1.0 Transitional statystyki www stat.pl
Copyright © 2004-2007 by phpnuke.org.pl :: PHP-Nuke Copyright © 2004 by Francisco Burzi.
Wizytówki, ulotki, projektowanie reklam, strony WWW :: Zdjęcia ślubne
Tworzenie strony: 0.14 sekund
Zapytań: 7
Kulturystyka :: gry java nokia :: gry :: Tanie kwatery :: java dla początkujących :: Fabryka Gwiazd :: kolektory słoneczne :: Krynica zdrój :: Gry java :: MONITORY
odchudzanie :: tablice z brązu :: darmowe statystyki :: wakacje włochy :: good warsaw hotels