PHP + MySQL ékezethelyesen

Emlékeztető magamnak, hogy PHP-ban és MySQL-ben miket kell beállítani, a karakterek ékezethelyes megjelenítéséhez :

1. mySQL oldalon (phpMyAdmin-al állítgassuk a következőket):

  1. Az SQL táblák szöveges mezőit (varchar és text) állítsuk "latin2_hungarian_ci" kódolásúra (egybevetés)
  2. Az adatbázis "Egybevetés" értékét is "latin2_hungarian_ci"-re
  3. phpMyAdmin-ban a "MySQL kapcsolat egyeztetés" szerver szintű beállítást is "latin2_hungarian_ci"-re (utána szerver restart)

2. PHP script oldalon

  1. Minden file legyen iso-8859-2 kódolású, lehetőleg a sorvégeket Win-esre (de ez nem fontos)
  2. SQL query előtt (de kapcsolódás után) adjuk ki ezt:
    
      $result = mysql_query("SET NAMES latin2");
    

    Fontos: a "SET CHARACTER latin2" string NEM kell utána, mert elcseszi a hosszú 'ő' és 'ű' karaktereket!

  3. FORM entry-be (HTML) írjuk be az "accept-charset" entity-t is például így:
    
     <FORM name="urlap" id="urlap" method="post" action="masik.php" accept-charset="iso-8859-2">
    
  4. Az alábbi header, stb beállításokat include-oljuk.
    
     header("Content-Type: text/html; charset=iso-8859-2");
     setlocale(LC_CTYPE, 'hu_HU');
     mb_internal_encoding('iso-8859-2');
     mb_http_output('iso-8859-2');
     

Hasznos linkek:

Update (22:45)

Nos, megy UTF8-al is...
Tanulság (amit már sokszor - de úgy tűnik nem elégszer - megtanultam): ha valami nem megy, egyszerre csak 1 dolgot javíts/módosíts rajta.

Tehát

  • "SET NAMES UTF8" kell, ahol az "UTF8" egyben, kötőjel nélkül írandó
  • "SET CHARACTER ..." string tényleg NEM kell utána

Köszönöm a hozzászólásokat.

Hozzászólások

Nem lenne a jovore nezve egyszerubb az utf-8-at hasznalni?
---
/* No comment */
Ketchup elementál megidézése a sajt síkra

Én nem túl rég gányoltam(!) php+mysql dolgokat, és nem volt semmi extra velük, minden megy, mint a karikacsapás. Kódolás: utf8_general_ci, php scriptek szintén utf8, a php kódban nem használtam semmi trükközést. Se a php.ini-ben, se a mysql.conf-ban, se httpd.conf-ban nem módosítottam olyan beállítást, ami hatással lenne a karakterkódolásra. Egyszerűen megy out of the box.

httpd: 2.2.8
php: 5.2.6
mysql: 5.0.51a

Weblabor /o\. Jo oldal, de ilyenekben ne hallgass ra. Gentoo alatt mar van utf8_hungarian_ci collation is.
--


()=() Ki oda vagyik,
('Y') hol szall a galamb
C . C elszalasztja a
()_() kincset itt alant.

Na, megy nekem is az UTF8 :)
Írtam update-et.