utf-8 naar en van MySQL met PHP

  • Onderwerp starter Onderwerp starter JHx
  • Startdatum Startdatum
Status
Niet open voor verdere reacties.

JHx

Gebruiker
Lid geworden
11 jan 2006
Berichten
407
Ik wil met PHP een aantal speciale karakters (Tsjechisch en Slowaaks: Č Ď Ě Ľ Ň Ř Š Ť Ž) opslaan in een MySQL-database, maar dat wil niet al te best lukken.
Als ik de karakters manueel invoer via phpMyAdmin, dan zie ik ze daar ook zoals het hoort, maar dan wordt op de webpagina '? ? ? ? ? ? � ? �' weergegeven.
Als ik de karakters via de php-pagina invoer, dan worden ze daar nadien wel juist weergegeven, maar dan zie ik in phpMyAdmin 'Č Ď Ě Ľ Ň Ř ŠŤ Ž' staan, en dan kan ik ook niet fatsoenlijk zoeken op die karakters!
Als ik de regel
PHP:
mysql_query("SET CHARACTER SET 'utf8'", $mysql_id);
toevoeg aan de php-code, dan wordt alles op de pagina wel presies zo weergegeven zoals in phpMyAdmin, maar een nieuwe toevoeging vanop de pagina resulteert in '? ? ? ? ? ? Š ? Ž' zowel in de database als op de pagina...

Dit is de php-pagina (die ook in utf-8 is opgeslagen):
PHP:
<?php
  $dbhost="********";
  $dbuser="********";
  $dbpass="********";
  $db="dbSK";
  $mysql_id=mysql_connect($dbhost,$dbuser,$dbpass);
//  mysql_query("SET CHARACTER SET 'utf8'", $mysql_id);
  if($_SERVER['REQUEST_METHOD']=="POST"){
    $sql="INSERT into tblSlova (slovo) VALUES ('".$_POST['txtSlovo']."');";
    $res=mysql_db_query($db,$sql,$mysql_id);
  }
?>
<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  </head>
  <body>
    Ik wil dit opslaan in de database:<br>
    Č Ď Ě Ľ Ň Ř Š Ť Ž<br>
    <form name="fSKtekst" action="" method="post">
      Slovo:<br>
      <input type="text" name="txtSlovo" ><br>
      <input type="submit" value="poslať">
    </form>
    Overzicht:<br>
<?php
    $sql="SELECT * FROM tblSlova ORDER BY id;";
    $res=mysql_db_query($db,$sql,$mysql_id);
    while($row=mysql_fetch_row($res)){
      echo $row[0].": ".$row[1]."<br>";
    }
?>
  </body>
</html>
<?php
  mysql_close($mysql_id);
?>
En zo heb ik de database en tabel aangemaakt:
Code:
CREATE DATABASE dbSK DEFAULT CHARACTER SET utf8 COLLATE utf8_bin;

CREATE TABLE dbsk.tblSlova(
id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
slovo VARCHAR(40) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL 
) ENGINE=InnoDB CHARACTER SET utf8 COLLATE utf8_bin;
Ik heb al wat met verschillende karaktersets zitten experimenteren, maar zonder resultaat!
Wie kan mij zeggen wat ik verder nog kan proberen?
 
Laatst bewerkt:
Het probleem is dat ik dan niet de karakters in de database krijg zoals ze zijn... en dat wil ik eigenlijk wel!

Aangezien phpMyAdmin ze er netjes in krijgt, moet het toch ook lukken vanuit een eigen php-pagina, niet?

Hmmm... misschien moest ik maar eens gaan neuzen in de broncode van phpMyAdmin, maar ik vrees dat dat mij een eind boven mijn petje (of zelfs 'hoge hoed') zal gaan :rolleyes:
 
Dit is de php-pagina (die ook in utf-8 is opgeslagen):
Heeft de php pagina een header in utf-8 / een meta met charset utf-8?

Iets in deze richting:
HTML:
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />


:thumb:
 
jep! kijk maar naar de broncode in mijn eerste bericht...

Maar als ik het goed begrijp, werkt die regel enkel op 'HTML-niveau'.
Is er ook zo iets waarmee je aangeeft dat PHP met utf-8 moet werken?
 
helemaal bovenaan de code toegevoegd, maar zonder het gewenste resultaat :(
 
Oplossing gevonden :cool:
Blijkjbaar werkt
PHP:
mysql_query("SET CHARACTER SET UTF8", $mysql_id);
alleen maar voor het ophalen van UTF8-data uit een database.

Om er voor te zorgen dat ook UTF8-data ook kunnen opgeslagen worden in de database gebruik je
PHP:
mysql_query("SET NAMES UTF8", $mysql_id);
of
PHP:
mysql_set_charset("UTF8");
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan