PHP - Jobba med databaser
Anslut till MySQL-databas med UTF-8-anslutning (Mysqli)
Om du vill använda teckentabellen UTF-8 i din webbsajt/webbapp krävs lite extra arbete för att tecken ska kodas/avkodas korrekt och för att de ska sparas korrekt i MySQL-databasen.
Först och främst måste MySQL-databasen använda teckentabellen UTF-8 när den spar data. För att den ska göra det anger du några extra parametrar när du skapar databasen. Om du vill skapa databasen direkt i MySQL- kommandoradsverktyget mysql kan du göra det enligt följande exempel:
create database databasnamn default character set utf8 default collate utf8_general_ci;
De HTML-dokument/PHP-filer som ska visa innehåll/innehåller formulär ska kodas i UTF-8 och taggen <meta charset="UTF-8"> ska användas i källkoden.
Värt att nämna i sammanhanget är även PHP-funktionen header;
header("Content-Type: text/html; charset=utf-8");
och förmulärattributet accept-charset;
<form action="saveformdata.php" accept-charset="UTF-8">
Om databasen skapats med parametrar enligt exemplet ovan, HTML-dokumenten/PHP-filerna kodats i UTF-8 och har taggen <meta charset="UTF-8"> i källkoden ska header och accept-charset inte behövas.
Värt att nämna är också att det brukar rekommenderas att man kodar HTML-dokument/PHP-filer i UTF-8 utan BOM (byte order mark) för att undvika problem med vissa textredigerare, äldre webbläsare och PHP-funktionen header. Själv har jag upplevt problem med avkodningen av specialtecken i PHP-filer kodade i UTF-8 utan BOM, trots att <meta charset="UTF-8"> funnits i källkoden. Koda i UTF-8 med eller utan BOM är alltså frågan... Här är det som vanligt trial and error-metoden som gäller, du får prova dig fram.
Det om detta... Med din UTF-8-MySQL-databas på plats:
Procedural stil
Spar exempelkoden nedan i en fil med teckenkodning UTF-8 och filändelsen .php.
Exempelkod:
<?php
// connect
$host = "127.0.0.1";
$user = "db_username";
$password = "password for db_username";
$database = "db_name";
$conn = mysqli_connect($host, $user, $password, $database, 3306);
//check connection
if(mysqli_connect_errno()){
printf("Connect failed: %s", mysqli_connect_error());
exit();
}
echo "<p>Connected to database</p>";
// change character set to utf8
if(!mysqli_set_charset($conn, "utf8")){
printf("Error loading character set utf8: %s", mysqli_error($conn));
} else {
printf("Current character set: %s", mysqli_character_set_name($conn));
}
// close connection
mysqli_close($conn);
?>
Objekt-orienterad stil
Spar exempelkoden nedan i en fil med teckenkodning UTF-8 och filändelsen .php
Exempelkod:
<?php
// connect
$host = "127.0.0.1";
$user = "db_username";
$password = "password for db_username";
$database = "db_name";
$mysqli = new mysqli($host, $user, $password, $database, 3306);
// check connection
if($mysqli->connect_errno){
printf("Connect failed: %s", $mysqli->connect_error);
exit();
}
echo "<p>Connected to database</p>";
// change character set to utf8
if(!$mysqli->set_charset("utf8")){
printf("Error loading character set utf8: %s", $mysqli->error);
exit();
} else {
printf("Current character set: %s", $mysqli->character_set_name());
}
// close connection
$mysqli->close();
?>
Mer info:
Mysqli - Connections
Mysqli - Set charset
mysql — The MySQL Command-Line Tool
Set HTTP header to UTF-8 using PHP
PHP - header
HTML <form> accept-charset Attribute


