PDA

Pogčedajte punu verziju : Pomoc oko Encoding


misko_
03. 04. 2008., 15:01
Cao,

Na php stranici koristim

<meta http-equiv="Content-Type" content="text/html; charset=charset=utf-8" />


Kada citam podatke iz baze koji imaju slova šđčćž, umijesto njih dobijem upitnike.

Otprilike kuzim u cemu je problem ali imaju neke stvari poje mi nisu najjasnije pa bih molio za pomoc.

Za ta polja i bazu mi pod "Collation" stoji "latin1_swedish_ci". Mislim da je ovdije zapravo problem, smatram da kada bi umijesto "latin1_swedish_ci" stajalo "utf_bin" da taj problem ne bi postojao. Da li sam upravu ???

Na glavnoj strani od phpMyAdmina mi stoji:

MySQL charset: UTF-8 Unicode (utf8)
MySQL connection collation: utf8_unicode_ci


Ne kuzim cemu ovo sluzi, da li mi netko moze objasniti?
Da li sa nekom promjenom ovdje mogu rijesiti svoj problem ?

Da li postoji neki nacin da ja kada pokupim string iz baze da ga prebacim iz "latin1_swedish_ci" u "utf-8" ?
Probavao sam sa http://de.php.net/utf8_encode , http://de3.php.net/mb_convert_encoding ali nisam uspio, iako nisam siguran da li je to uopce moguce ?

Koje postavke vi koristite kod MySQL-a za polja(baze) koja imaju "šđžćč" slova i sto koristite za charset unutar meta taga ?

Jedno od rijesenja koje sam nasao je da prebacim cijelu bazu u utf8 objasnjeno je na http://drupal.org/node/62258 ili http://www.oreillynet.com/onlamp/blog/2006/01/turning_mysql_data_in_latin1_t.html samo nisam siguran da li ce mi to uopce pomoci.

Sto bi mi vi savjetovali ?

P.S. neki linkovi koje sam pronasao da su korisni
http://www.joelonsoftware.com/articles/Unicode.html
http://www-atm.physics.ox.ac.uk/user/iwi/charmap.html
http://www.i18nguy.com/unicode/codepages.html#msftdos

Hvala

mileusna
03. 04. 2008., 15:32
Za ta polja i bazu mi pod "Collation" stoji "latin1_swedish_ci". Mislim da je ovdije zapravo problem, smatram da kada bi umijesto "latin1_swedish_ci" stajalo "utf_bin" da taj problem ne bi postojao. Da li sam upravu ???

Da, definitivno ti polje u bazi mora biti utf_* da bi cela stvar funkcionisala.


MySQL charset: UTF-8 Unicode (utf8)
MySQL connection collation: utf8_unicode_ci
Ne kuzim cemu ovo sluzi, da li mi netko moze objasniti?
Da li sa nekom promjenom ovdje mogu rijesiti svoj problem ?


Određuješ charset za MySQL konekciju, upravo da bi se uskladio encoding između baze i SQL klijenta, u ovom slučaju phpMyAdmina, kako bi svi karakteri bili pravilo enkodirani i da ne bi došlo do "brljanja".

Praksa je da ovo radiš i iz svojih PHP skriptova nakon kreiranja MySQL konekcije:
mysql_query("SET NAMES utf8");
mysql_query("SET collation_connection='utf8_general_ci'");

Da li postoji neki nacin da ja kada pokupim string iz baze da ga prebacim iz "latin1_swedish_ci" u "utf-8" ?


Pogledaj iconv (http://www.php.net/iconv) funkciju, to bi trebalo da ti završi posao.


Koje postavke vi koristite kod MySQL-a za polja(baze) koja imaju "šđžćč" slova i sto koristite za charset unutar meta taga ?


<meta http-equiv='Content-Type' content='text/html; charset=utf-8' />

U svakom slučaju UTF-8 je najbolje rešenje i ne treba se zanasiti sa starijim kodnim rasporedima.

misko_
12. 04. 2008., 12:48
NIje mi se dalo zezati sa iconv funkciju, nego sam cijelu bazu(sva polja, tablice, i samo zabtu prebacio u utf8) za to sam se pomogao kod(nije mi se dalo rucno)


<?php
$db = mysqli_connect('localhost','username','password', 'db');
if(mysqli_connect_errno())
{
echo "Cannot connect to the database - incorrect details";
}

$sql = 'SHOW TABLES';
if ( !( $result = $db->query( $sql ) ) ) {
echo '<span style="color: red;">Get SHOW TABLE - SQL Error: <br>' . "</span>\n";
}


while ( $tables = $result->fetch_row() ) {
echo $tables[0];
# Loop through all tables in this database
$table = $tables[key($tables)];

if ( !( $result2 = $db->query("ALTER TABLE ".$table." COLLATE utf8_general_ci") ) ) {
echo '<span style="color: red;">UTF SET - SQL Error: <br>' . "</span>\n";

break;
}

print "$table changed to UTF-8 successfully.<br>\n";

# Now loop through all the fields within this table
if ( !($result2 = $db->query("SHOW COLUMNS FROM ".$table) ) ) {
echo '<span style="color: red;">Get Table Columns Query - SQL Error: <br>' . "</span>\n";

break;
}

while ( $column = $result2->fetch_assoc() )
{
$field_name = $column['Field'];
$field_type = $column['Type'];

# Change text based fields
$skipped_field_types = array('char', 'text', 'enum', 'set');

foreach ( $skipped_field_types as $type )
{
if ( strpos($field_type, $type) !== false )
{
$sql4 = "ALTER TABLE $table CHANGE `$field_name` `$field_name` $field_type CHARACTER SET utf8 COLLATE utf8_general_ci";
$result4 = $db->query($sql4);

echo "---- $field_name changed to UTF-8 successfully.<br>\n";
}
}
}
echo "<hr>\n";
}
$result->free();
$result2->free();
$result4->free();
?>

koji sam pronasao medu komentarima na http://dev.mysql.com/doc/refman/5.0/en/charset-connection.html

jos bi nadodao da stari unosi koji su bili uneseni u "latin1_swedish_ci" nisu prikazivali neka slova kako treba, pa sam to rucne prebacio(jer ih nije bilo puno), ali sma siguran da bi se i za to dala napisati kakva skripta...