ithg13
Goto Top

Codierung in PHP und HTML richtig einstellen

Hallo,

ich beschäftige mich gerade mit PHP/HTML/MySQL. Dafür habe ich eine kleine Linux/Apache-Testumgebung gebaut und eine kleine "Webseite" gebastelt. Meine Webseite liest einige Daten aus einer Tabelle in MySQL aus und schreibt diese über eine While-Schleife in eine Tabelle. Das funktioniert alles tadellos. Allerdings habe ich ein Problem mit der Darstellung bzw. der Codierung. Meiner Meinung nach habe ich an allen, mir bekannten, Stellen auf eine einheitlich Codierung geachtet (UTF-8). Die DB, sowie alle Tabellen sind mit UTF_general_ci erstellt worden.

Allerdings werden Daten mit umlauten aus der DB nicht korrekt angezeigt:

1) So sieht die Ausgabe der Daten im Browser aus. Die Überschrift "Straße" wird richtig angezeigt...die einzelen Angaben dazu nicht.

2e4a6d43e5ab9575899bd58f04cc4c37


2) So sieht die Tabelle in MySQL-Workbench aus

31f7ce7c3e1bc6f779dd1d17a93ecb0b

3) Wenn ich die Codierung im Browser von UTF-8 auf Westeuropäisch (ISO) stelle, dann kommen die Daten zwar richtig "raus" aber die Überschriften sind aufeinmal falsch.

d76992efa52317c32d73e3e9ead339d2

4) So sieht der Seitenquelltext aus...das charset ist auch hier auf UTF8....

a355b9a9f62d27c24959f02899def9a8

Ich kann den Fehler nicht finden, kann mir einer von euch helfen??

Content-ID: 266862

Url: https://administrator.de/contentid/266862

Ausgedruckt am: 26.11.2024 um 03:11 Uhr

eisbein
eisbein 19.03.2015 aktualisiert um 16:20:36 Uhr
Goto Top
Hallo!

Wie sieht deine Datenbankverbindung aus?

function db_open()
{
   $Con = mysql_connect("mysql-server", "user", "kennwort") or die("kein connect");  
   mysql_set_charset('utf8', $Con);  
   mysql_select_db("database", $Con);  
   mysql_query("SET NAMES utf8;");  
}

Das hat bei mir geholfen face-smile

Gruß
Eisbein
114757
Lösung 114757 19.03.2015, aktualisiert am 20.03.2015 um 13:00:32 Uhr
Goto Top
Yup, die Datenbankverbindung würde mich auch interessieren face-smile

Beispiel mit PDO
function connect_db(){
	$DB_HOST = '127.0.0.1';  
	$DB_NAME = 'test_db';  
	$DB_USER = 'root';  
	$DB_PASSWORD = 'geheim';   
	$db = new PDO('mysql:host='.$DB_HOST .';dbname='.$DB_NAME.';charset=utf8', $DB_USER, $DB_PASSWORD,array(PDO::ATTR_EMULATE_PREPARES => false, PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));  
	return $db;
}
Gruß jodel32
ITHG13
ITHG13 19.03.2015 aktualisiert um 18:50:31 Uhr
Goto Top
Hi,

danke für die Antworten! Meine Datenbankverbindung ist "zweigeteilt"...d.h. ich habe eine "dbconnect.php"-Datei die innderhalb der eigentlichen PHP-Datei per include aufgerufen wird, damit ich für den späteren Verlauf nur einmal die Credentials ändern muss. Die beiden Dateien sehen folgendermaßen aus:

dbconnect.php
<?php
error_reporting(E_ALL);
// Zum Aufbau der Verbindung zur Datenbank
define ( 'MYSQL_HOST',      'XX' );  
define ( 'MYSQL_BENUTZER',  XX );  
define ( 'MYSQL_KENNWORT',  'XX' );  
define ( 'MYSQL_DATENBANK', 'XX' );  
 
$db_link = mysqli_connect (MYSQL_HOST, 
                           MYSQL_BENUTZER, 
                           MYSQL_KENNWORT, 
                           MYSQL_DATENBANK);

ausgabe.php
<?php
include ("dbconnect.php");   
$db_link = mysqli_connect (MYSQL_HOST, 
                                                MYSQL_BENUTZER, 
                                                MYSQL_KENNWORT, 
                                                MYSQL_DATENBANK);

$sql = "Select *FROM *'";  
$db_erg = mysqli_query($db_link, $sql);


hier gehts dann weiter mit der Verarbeitung der Daten in der Tabelle...


Wie würdet ihr das denn jetzt "umbauen"??
114757
Lösung 114757 19.03.2015, aktualisiert am 20.03.2015 um 13:00:23 Uhr
Goto Top
z.B. mit PDO so

dbconnect.php
<?php
define ('MYSQL_HOST','XX' );  
define ('MYSQL_BENUTZER','XX' );  
define ('MYSQL_KENNWORT','XX' );  
function connect_db($DB_NAME)
{
    $db = new PDO('mysql:host='.$MYSQL_HOST.';dbname='.$DB_NAME.';charset=utf8', $MYSQL_BENUTZER, $MYSQL_KENNWORT,array(PDO::ATTR_EMULATE_PREPARES => false, PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));  
    return $db;
}
?>

ausgabe.php
<?php
include ("dbconnect.php");   
Try{
    $db_link = connect_db("NameDerDatenbank");  
     $sql = "Select * From Tabelle";  
     foreach ($db_link->query($sql) as $row) {
        //....
     }

}catch (PDOException $ex){
    echo "Es ist ein Fehler beim Datenbankabruf aufgetreten: " . $ex;   
}
?>
ITHG13
ITHG13 20.03.2015 um 13:03:32 Uhr
Goto Top
Danke! Problem gelöst..... es hat gereicht, den charset bei dem Verbindungsaufbau durch mysql_set_charset('utf8', $Con); fest zu setzen!