Izbornik Zatvoriti

Veb, PHP, MySQL i srpsko pismo

Skraćena veza: https://pedja.supurovic.net/veza/5634

Iako je odavno rešena podrška korišćenja našeg ćiriličnog i latiničnog pisma na MySQL serveru, još uvek se dešava da mi se mlađe kolege javljaju sa problemom da im naša slova ne rade kako treba na sajtovima.

Evu ukratko šta treba uraditi da bi ste mogli koristiti naša slova na sajtu:

Najpre, na MySQL serveru, svakoj tabeli i polju koje treba da sadrži naša ćirilična ili latinična slova treba podesiti kodnu stranu na UTF-8. Na primer:

create table `moja_tabela` (
  `id` int auto_increment primary key not null,
  `naziv` varchar(25) character set utf8
  `mesto` varchar(25) character set utf8
) engine=myisam;

Ovo komandom će u tabeli ‘moja_tabela’ poljima ‘naziv’ i ‘mesto’ biti podešeno UTF-8 kodiranje znakova tako da će u njih moći da se upisuju i naša ćirilična i latinična slova.

Sledeće je da u zaglavlju HTML strane koju šaljete korisniku naglasite da je sadržaj kodiran kao UTF-8. To ćete postići tako što ćete u zaglavlje HTML strane (<head>) staviti komandu:

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

Tako će i veb čitači znati da treba da koriste UTF-8 znakove prilikom prikazivanja strane ali i prilikom slanja podataka serveru, ukoliko popunjavate neki obrazac ili slično.

Bitan korak je i da se u PHP prilikom uspostavljanja konekcije na MySQL server naglasi da treba koristiti UTF-8 kodiranje.

Dakle, nakon što se napravi konekcija…

$dbc = mysql_pconnect($hostname, $username, $password) or
  die(mysql_error());

… i otvori baza …

mysql_select_db($database, $link);

… treba podesiti i kodnu stranu…

mysql_query ("SET NAMES 'utf8' COLLATE 'utf8_unicode_ci'");

Sve ovo je potrebno i dovoljno da izbegnete probleme sa lošim kodiranjem naših znakova prilikom upisivanja, čitanja i prikazivanja sadržaja baze.

14 Comments

  1. Tapavicki

    Još jedna sitnica pre ispisa (u *.php), čisto da budemo sigurni da je stranica poslata čitaču (browser) kako treba:
    header('Content-Type: text/html; charset=utf-8');
    Preporučujem prvo proveriti server (server config, virtual host):
    AddDefaultCharset On|Off|charset
    pošto je podrazumevano (default):
    AddDefaultCharset Off

    Ako niste voljni ili nemate prava da menjate konfiguraciju Apača onda možete dodati u .htaccess umesto za svaki fajl posebno:
    AddDefaultCharset UTF-8
    ili posebno za ekstenziju:
    AddCharset UTF-8 .html

    Kod otvaranja baze, moja standardna rutina je:

    $query = "SET NAMES 'utf8'";
    $result = mysql_query($query) or die('Error : ' . mysql_error());

    $query = "SET CHARACTER SET utf8";
    $result = mysql_query($query) or die('Error : ' . mysql_error());

    $query = "SET COLLATION_CONNECTION='utf8_general_ci'";
    $result = mysql_query($query) or die('Error : ' . mysql_error());

    To me rešava svih problema sa UTF setom karaktera.

  2. Milan

    Moj hosting provajder koristi „utf_8_general_ci“ za collation, ima li potreba da prebacujem na „utf_8_unicode_ci“ ako koristim nasu ćirilicu i latinicu, pošto nisam primetio da nešto ne radi kako treba, ovako kako je inicijalno postavljen wordpres od strane provajdera (loopia)…

    Ako bi koristio ruski jezik, jel onda utf_8_unicode_ci pravo rešenje

    • Peđa

      Ne bi trebalo da ima veze sve dok se ćirilična slova ispravno prikazuju.

      Vodi računa, ovaj dodatak ne preslovljava sa ruskog jezika. Presloviće samo ona slova koja su zajendička ruskoj i srpskoj ćirilici.

  3. Uros

    Pozdrav,da li moze iko da mi pomogne. Pravim bazu za websajt gde moram da upisujem latinicu (srb) i nece da mi cita slova.
    Koristim HeidiSQL i postavio sam „collacion“ da mi bude utf8_unicode_ci kao i opisano ali opet nista ne reagouje…
    Moze mala pomoc?

    • Peđa

      Ovo kako stoji u uputstvu treba da radi. Proveri da li si sve dobro podesio i eventualno da li SQL server, PHP i veb server imaju instalirano sve što je potrebno.

  4. Rade

    Možeš li da mi napišeš konačan kod otvaranja baze npr. koja se naziva „prva“ jer nešto mi ne funkcioniše?Hvala.

    • Peđa

      U primeru u članku zamenite ispred dodajte linije kojima dodeljujete vrednsoti promenljivama $hostname, $username, $password i to je sve.

  5. Bobo

    Pozdrav,

    Imam problem da mi aplikacija ne javlja probleme sa cirilicom. Unosi u bazu i cita iz baze ali je problem kada odem u browse u mysql i vidim samo skup raznih simbola. Cijela baza je „utf_8_unicode_ci“ kao i vecina kolona. Da li neko zna kako da ovo rijesim i jos dal je moguce pristupiti lolachost pomocu chrome ili bilo kod drugog browsera sem internet explorera.

    Hvala,
    Bobo

  6. Zoran Djordjević

    Svaka čast

    Naravno u HTML-u svakako treba da stoji:

    a ovaj sledeći red sve rešava :
    mysql_query („SET NAMES ‘utf8’ COLLATE ‘utf8_unicode_ci'“);

    Proverio sam. Radi savršeno i sa ćirilicom i sa našim latiničnim slovima. Ceo dan sam potrošio da ovo rešim i na kraju sam našao ovo.

    Hvala na pravoj informaciji

Ostavite odgovor na Banjole Odustani od odgovora

Vaša adresa e-pošte neće biti objavljena. Neophodna polja su označena *

Popunite izraz tako da bude tačan: *

Ovo veb mesto koristi Akismet kako bi smanjilo nepoželjne. Saznajte kako se vaši komentari obrađuju.