Php-Fusion UTF-8 režimu
Parašė ozzWANTED 2010 rugpjūčio 26 12:08:47

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(
"&#260;", "&#268;", "&#280;", "&#278;", "&#302;", "&#352;", "&#370;", "&#362;", "&#381;",
"&#261;", "&#269;", "&#281;", "&#279;", "&#303;", "&#353;", "&#371;", "&#363;", "&#382;");
$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