Php-Fusion v7.01 Lithuanian pack v1.1 bus išleistas pirmiausia TIK UTF-8 režimui. O po to jau bus matyti kaip kas bus.
Todėl, norint turėti Php-Fusion UTF-8, jums reikia šių dalykų:
1. Naudoti naują mail() funkciją, kurią pavadinau mail_utf8(): function mail_utf8($to, $subject = '(No subject)', $message = '', $from='PhpFusion-lt.com', $fromName='PhpFusion-lt.com robotas') { $header = 'MIME-Version: 1.0' . "n" . 'Content-type: text/plain; charset=UTF-8' . "n" . 'From: =?UTF-8?B?'.base64_encode($fromName).'?= <' . $from . ">n"; mail($to, '=?UTF-8?B?'.base64_encode($subject).'?=', $message, $header); }
Ją rekomenduočiau pasidėti į maincore.php kažkurioje vietoje. Ši funkcija nesusieta su TVS, todėl gali būti naudojama bet kur vietoje mail() funkcijos, jeigu naudojate UTF-8 režimą.
2. Php-Fusion v7.01 sistemos su PhpMailer v2.0.4 biblioteką, arba tiesiog nusikopijuoti phpFusion v7.01 failus: includes/sendmail_include.php includes/class.phpmailer.php ir direktoriją: includes/language/
3. Redaguoti maincore.php failą ir pakeisti dbconnect() funkciją nauja. T.y. susirandame šį kodą: function dbconnect($db_host, $db_user, $db_pass, $db_name) { global $db_connect;
$db_connect = @mysql_connect($db_host, $db_user, $db_pass); $db_select = @mysql_select_db($db_name); if (!$db_connect) { die("<div style='font-family:Verdana;font-size:11px;text-align:center;'><strong>Unable to establish connection to MySQL</strong><br />".mysql_errno()." : ".mysql_error()."</div>"); } elseif (!$db_select) { die("<div style='font-family:Verdana;font-size:11px;text-align:center;'><strong>Unable to select MySQL database</strong><br />".mysql_errno()." : ".mysql_error()."</div>"); } }
ir keičiame jį į šią mano papildytą kodą: // UTF-8 Supporting dbconnect edited by ozzWANTED @ PhpFusion-Lt.com function dbconnect($db_host, $db_user, $db_pass, $db_name,$charset="utf8") { $db_connect = @mysql_connect($db_host, $db_user, $db_pass); $db_select = @mysql_select_db($db_name); if (!$db_connect) { die("<div style='font-family:Verdana;font-size:11px;text-align:center;'><b>Unable to establish connection to MySQL</b><br />".mysql_errno()." : ".mysql_error()."</div>"); } elseif (!$db_select) { die("<div style='font-family:Verdana;font-size:11px;text-align:center;'><b>Unable to select MySQL database</b><br />".mysql_errno()." : ".mysql_error()."</div>"); } // SET CHARSET //echo "MYSQL CHARSET: ".mysql_client_encoding();
//mysql_set_charset if (!function_exists('mysql_set_charset')) { mysql_query("SET NAMES $charset"); } else { mysql_set_charset($charset); } }
4. Jeigu tai tik bus nauja instaliacija Php-Fusion v7.01.X sistemos, tai dar atsidarome setup.php failą ir ir pakeisti dbconnect() funkciją nauja TAIP pat kaip padarėte 3-iame žingsnyje.
5. Prisijungus prie phpMyAdmin Jūsų saito MySQL duomenų bazei pakeisti charset į utf8_lithuanian_ci . Tuomet visoms lentelėms uždėti default chaset: "utf8_lithuanian_ci".
6. Tada redaguoti visus duomenų bazės lentelių laukelius(kur FIGŪRUOJA CHARSET) ir pakeisti jų koduotę("character set") į "utf8_lithuanian_ci". Kad būtų paprasčiau ir nereikėtų bėgioti po lenteles ir rankioti ir redaguoti laukelius po vieną, dar šiokios tokios pagalbos Jums suteiksiu. Parašau minimalų sql query kodą kuris Jums padės: ALTER TABLE `fusion_users` CONVERT TO CHARACTER SET utf8 COLLATE utf8_lithuanian_ci; ALTER TABLE `fusion_users` DEFAULT CHARACTER SET utf8 COLLATE utf8_lithuanian_ci;
Vietoje fusion_users įrašykite kiekvienos iš savo lentelių duomenų bazėje pavadinimus ir kaskart įvykdykite užklausas.
7. Galimas atvejis, kad ir visus arba kai kuriuos Php-Fusion branduolio failus teks persaugoti į UTF-8. Tačiau tai aktualu tik tuo atveju, jeigu tuose failuose naudojate Lietuviškas reikšmes, pvz. jeigu maincore.php turite funkcijų kaip: function check_thanks_in_title($title) { if(strstr($title,"[AČIŪ]") !== false) return true; else return false; } ir pan.
8. Jeigu jau turite saitą su ne UTF-8 duomenų baze, kurioje yra hieroglifų vietoje LT raidžių, tai pirmiausia reikėtų dar reiktų atsidarius pridėtinius puslapius įvykdyti šį mano parašytą skriptuką: <?php // LT to HTML encoded characters transform function function lt2html_parse($text) { $search = array( "Ą", "Č", "Ę", "Ė", "Į", "Š", "Ų", "Ū", "Ž", "ą", "č", "ę", "ė", "į", "š", "ų", "ū", "ž"); $replace = array( "Ą", "Č", "Ę", "Ė", "Į", "Š", "Ų", "Ū", "Ž", "ą", "č", "ę", "ė", "į", "š", "ų", "ū", "ž"); $text = str_replace($search, $replace, $text); return $text; }
$results = array(); $results[] = array("table" => DB_COMMENTS, "fields" => array("comment_message")); $results[] = array( "table" => DB_MESSAGES, "fields" => array("message_subject","message_message") ); $results[] = array("table" => DB_POSTS, "fields" => array("post_message")); $results[] = array("table" => DB_SHOUTBOX, "fields" => array("shout_message")); $results[] = array("table" => DB_THREADS, "fields" => array("thread_subject")); foreach($results AS $result) { $t = $result['table']; $f = $result['fields']; $query = dbquery("SELECT ".implode(", ",$f)." FROM $t"); while($data = dbarray($query)) { $f_upd = ""; foreach($f AS $f_el) $f_upd .= "$f_el='".lt2html_parse($data[$f_el])."'"; dbquery("UPDATE $t SET $f_upd"); } } ?>
Tikiuosi straipsnis Jums padės savo sistemą persikelti į UTF-8. Windows-1257 era artėja į pabaigą, sulig Php 6, UTF-8 turėtų veikti pagal nutylėjimą. Tiesa, Php kurėjai su šiuo dalyku gana neprastai įstrigo, ir netgi buvo pervadintas į atskirą projektą Php Trunk.
Atnaujinta (C) 2011-04-02 2010 (C) ozzWANTED @ PhpFusion-lt.com
| Straipsnio informacija
AutoriusozzWANTED
Parašymo data2010 rugpjūčio 26 12:08:47
Komentarų32
Skaityta7615 Straipsnio sudėtingumas(Pažengusiems) Spausdinti |