Kodowanie znaków |
Kodowanie znaków |
9.07.2008, 22:32:55
Post
#1
|
|
Grupa: Zarejestrowani Postów: 24 Pomógł: 0 Dołączył: 22.01.2008 Skąd: Tarnobrzeg Ostrzeżenie: (0%) |
Sprawa jest taka że.
CMS MemHT Portal oraz MemHT PolishPack 1 mają kodowanie znaków ustawione na ISO natomiast wersja MemHT PolishPack 2 na utf i tu powstaje problem. Przy czystej instalacji pp2 niema problemów z kodowaniem natomiast gdy ktoś zaaktualizuje z innej wersji do PolishPack 2 pojawiają się krzaczki. Ja widzę tutaj 2 rozwiązania lecz niemam na nie już pomysłu. 1. Zrobić skrypt do konwersji bazy który będzie się uruchamiał podczas aktualizacji. 2. Zrobić skrypt który będzie podczepiony do metody query w klasie database. Co do 1 niemam pomysłu całkowicie jak zrobić skrypt aby nie wykraczył się z większą bazą. Co do 2 to: Zrobiłem funkcję do konwersji znaków i nic pokazywało komunikat o tym że nie może znaleść tabeli w bazie... Użyłęm funkcji iconv() => Kod <b>Warning</b>: iconv() expects parameter 3 to be string, resource given in <b>...</b> Używałem także unicode_decode() oraz utf8_encode() i wszystko na co napotkałem się w manualu ale z tym naprawdę niemogę sobie poradzić. Nie oczekuje gotowego skryptu oczekuje natomiast pewnych wskazówek które pomogły by mi w rozwiązaniu problemu. Wstyd mi pisać bo jeśli zajmuje się stroną kodową MemHT PolishPack powiniennem sobie z tym bez problemu poradzić a jednak nigdy nie spodkałem się z tym problemem i stoję w miejscu... |
|
|
9.07.2008, 23:42:24
Post
#2
|
|
Grupa: Zarząd Postów: 3 503 Pomógł: 28 Dołączył: 17.10.2002 Skąd: Wrocław |
Ja bym zrobił dump bazy na dysk, skonwertował go np. Gżegżółką i wrzucił z powrotem na serwer.
-------------------- |
|
|
9.07.2008, 23:47:51
Post
#3
|
|
Grupa: Zarejestrowani Postów: 24 Pomógł: 0 Dołączył: 22.01.2008 Skąd: Tarnobrzeg Ostrzeżenie: (0%) |
Tak ale jak pisałem już wyżej musi być to automatyczne aby można było to wklepać w cms.
Nie każdy będzie umiał przy updacie zrobić dump`a podmienić i wrzucić. Tu jest największy problem właśnie. -------------------- |
|
|
9.07.2008, 23:50:15
Post
#4
|
|
Grupa: Zarząd Postów: 3 503 Pomógł: 28 Dołączył: 17.10.2002 Skąd: Wrocław |
No tak, nie doczytałem, sorki.
Zainteresował mnie fragment, w którym używasz iconv" title="Zobacz w manualu PHP" target="_manual - wyraźnie jest napisany komunikat błędu. Jeśli jeszcze masz gdzieś na dysku, pokaż kawałek kodu, który wygenerował ten błąd - idę o zakład, że jedna drobna poprawka wystarczy. -------------------- |
|
|
10.07.2008, 12:05:57
Post
#5
|
|
Grupa: Zarejestrowani Postów: 24 Pomógł: 0 Dołączył: 22.01.2008 Skąd: Tarnobrzeg Ostrzeżenie: (0%) |
Nie używałem nigdy tego typu funkcji lecz myślę że implementuje ją poprawnie.
Plik: inc/inc_database.php Linie: 82-86 Medota: query Kod bez zmian Kod function query($query) { $result = mysql_query($query,$this->dblink); return $result; } Z iconv Kod function query($query) { $result = mysql_query($query,$this->dblink); $result = iconv("ISO-8859-2","UTF-8", $result); return $result; } Co prawda z tym iconv będzie jeszcze trzeba zrobić instrukcję warunkową która włącza tą funkcję tylko jeżeli wynik zapytania jest kodowany w ISO Ale to nie problem. Ten post edytował adminik 10.07.2008, 12:13:37 -------------------- |
|
|
10.07.2008, 23:47:56
Post
#6
|
|
Grupa: Zarząd Postów: 3 503 Pomógł: 28 Dołączył: 17.10.2002 Skąd: Wrocław |
Pierwsze primo - mysql_query" title="Zobacz w manualu PHP" target="_manual zwraca identyfikator zasobu,
Drugie primo - po tym zasobie musisz się przeiterowac np. używając mysql_fetch_assoc" title="Zobacz w manualu PHP" target="_manual Trzecie primo - dopiero wynik powyższego traktujesz iconv" title="Zobacz w manualu PHP" target="_manualem -------------------- |
|
|
11.07.2008, 13:45:36
Post
#7
|
|
Grupa: Zarejestrowani Postów: 24 Pomógł: 0 Dołączył: 22.01.2008 Skąd: Tarnobrzeg Ostrzeżenie: (0%) |
A no tak. Jednak przydało by się jeszcze użyć funkcji serialize" title="Zobacz w manualu PHP" target="_manual i unserialize" title="Zobacz w manualu PHP" target="_manual
Aby przekonwerterować array na sting i potem string na array. Przy takim użyciu jak napisałeś też pokazuje błąd związany z tym ze do funkcji iconv przekazywana jest tablica a nie ciąg. Nawet przy użyciu serialize" title="Zobacz w manualu PHP" target="_manual nie osiągam odpowiedniego rezultatu. Będę musiał pisać funkcję konwersji znaków ręcznie z tego co widzę. Kod class database { var $dblink; var $host = "localhost"; var $user = "root"; var $pass; var $name; //PHP5 Constructor function __construct() { global $db_host,$db_user,$db_pass,$db_name; $this->host = $db_host; $this->user = $db_user; $this->pass = $db_pass; $this->name = $db_name; } //PHP4 Constructor function database() { global $db_host,$db_user,$db_pass,$db_name; $this->host = $db_host; $this->user = $db_user; $this->pass = $db_pass; $this->name = $db_name; } function iso2utf ( $array ) { $string = serialize ( $array ); $result_string = iconv ( "ISO-8859-2" , "UTF-8" , $string ); $array = unserialize ( $result_string ); return $array; } function connect() { $this->dblink = @mysql_connect($this->host,$this->user,$this->pass) or die("<html xmlns=\"http://www.w3.org/1999/xhtml\" xml:lang=\"pl\" lang=\"pl\"> <head><meta http-equiv=\"Content-type\" content=\"text/html; charset=UTF-8\" /> <title>Komunikat</title></head> <body><div style=\" padding: 2px; border: 1px solid #999; background-color: #EEE; font-family: Verdana; font-size: 10px; margin:0 auto;\"> <b>Błą</b> Nie można połaczyć się z serwerem MySQL ! </div></body></html>"); @mysql_select_db($this->name,$this->dblink) or die("<html xmlns=\"http://www.w3.org/1999/xhtml\" xml:lang=\"pl\" lang=\"pl\"> <head><meta http-equiv=\"Content-type\" content=\"text/html; charset=UTF-8\" /> <title>Komunikat</title></head> <body><div style=\" padding: 2px; border: 1px solid #999; background-color: #EEE; font-family: Verdana; font-size: 10px; margin:0 auto;\"> <b>Błąd:</b> Nie można wybrać bazy ! </div></body></html>"); } function disconnect() { @mysql_close($this->dblink); } function ping() { if (!mysql_ping($this->dblink)) { $this->disconnect(); $this->connect(); } } function query($query) { $result = mysql_query($query,$this->dblink); return $result; } function get_row($query) { $result = $this->query($query); $returned = @mysql_fetch_assoc($result); //$returned = $this->iso2utf($returned); @mysql_free_result($result); return $returned; } function get_list($query) { $returned = array(); $result = $this->query($query); while ($row = mysql_fetch_assoc($result)) { //$row = $this->iso2utf($row); $returned[] = $row; } @mysql_free_result($result); return $returned; } function get_num($query) { $result = $this->query($query); $num = mysql_num_rows($result); @mysql_free_result($result); return $num; } //Do not print errors function get_num_noerr($query) { $result = @$this->query($query); $num = @mysql_num_rows($result); @mysql_free_result($result); return $num; } function optimize($gfx=false) { global $db_name; if ($gfx) { echo "<b>"._OPTIMIZINGDATABASE_."</b><br /><br />"; } $result = mysql_list_tables($db_name); $i = 0; $toopt = array(); while ($i < mysql_num_rows($result)) { $name_table = mysql_table_name($result, $i); if ($gfx) { echo "<img src='images/check-green.gif' title='"._TABLE_." $name_table "._OPTIMIZED_."' border='0' alt='Ok' /> $name_table<br />"; } $toopt[] = $name_table; $i++; } $sql = "OPTIMIZE TABLE ".implode(",",$toopt); if ($result_set = @mysql_query($sql)) { if ($gfx) { echo "<br /><b>"._OPTIMIZINGDATABASEFINISHED_."</b>"; } return true; } else { return false; } mysql_free_result($result_set); } function affected_rows(){ return mysql_affected_rows(); } } Nic pomyślę może sobie poradzę... muszę sobie poradzić ;p |
|
|
11.07.2008, 17:45:20
Post
#8
|
|
Grupa: Zarząd Postów: 3 503 Pomógł: 28 Dołączył: 17.10.2002 Skąd: Wrocław |
Chłopie, jaka serializacja? Co ty za herezje piszesz.. słyszałeś o array_walk" title="Zobacz w manualu PHP" target="_manual?
-------------------- |
|
|
12.07.2008, 13:07:42
Post
#9
|
|
Grupa: Zarejestrowani Postów: 24 Pomógł: 0 Dołączył: 22.01.2008 Skąd: Tarnobrzeg Ostrzeżenie: (0%) |
Ups. prawie dzięki wielkie nie spotkałem się z tą funkcją nigdy.
-------------------- |
|
|
Wersja Lo-Fi | Aktualny czas: 26.04.2024 - 03:55 |