Website (PHP/MySQL) UTF-8 fit machen

Hallo,

ich möchte auf meiner Website sorgenfrei Umlaute und u.U. weitere Sonderzeichen verwenden können. Nach einer kurzen Recherche ist „UTF-8“ wohl das Mittel der Wahl. Allerdings ist die Einbindung der UTF-8 Kodierung scheinbar eine kleine Lebensaufgabe.

1.) Dateiern speichern (.php, .html etc.)

Die Skripte müssen in der UTF-8 Kodierung gespeichert werden. Im Editor z.B. unter „Speichern unter“ zu finden (Codierung: UTF-8).

2.) HTML

In HTML gehört folgender Tag in den „Kopf“, also zwischen und .

Noch dazu müssen Formulare auf UTF-8 umgestellt werden.

3.) MySQL

Sowohl bei der Erstellung der Datenbank als auch bei der Erstellung von Tabellen muss UTF-8 als „default character set“ angegeben werden.

create database test_datenbank default character set UTF8;

use test_datenbank;

create table test_tabelle
(
test_spalte varchar(15) not null
) engine=InnoDB default character set UTF8;4.) PHP

Bleibt noch PHP, nach meiner Recherche ist es nötig den PHP Header aufzurufen:

<?php header("Content-Type: text/html; charset=UTF-8"); ?>

Anscheinend muss dies vor dem HTML Tag sein. Meinen HTML Code rufe ich allerdings in einer PHP Funktion auf:

<?php session_start();
require\_once('funktionsbib.php'); do\_html\_header('Titel einfügen'); ?\> Muss der PHP Header auch vor "session\_start()" und "require\_once()" gestartet werden? Dann sollte MySQL auch noch mitgeteilt werden, dass UTF-8 übermittelt wird: $mysqli = new mysqli("hostname", "benutzername", "passwort", "datenbankname"); $mysqli-\>set\_charset("utf8"); Stimmt das alles soweit? Habe ich etwas vergessen? Schöne Grüße, Q\_5

Hallo,

ich möchte auf meiner Website sorgenfrei Umlaute und u.U.
weitere Sonderzeichen verwenden können. Nach einer kurzen
Recherche ist „UTF-8“ wohl das Mittel der Wahl. Allerdings ist
die Einbindung der UTF-8 Kodierung scheinbar eine kleine
Lebensaufgabe.

1.) Dateiern speichern (.php, .html etc.)

Die Skripte müssen in der UTF-8 Kodierung gespeichert werden.
Im Editor z.B. unter „Speichern unter“ zu finden (Codierung:
UTF-8).

2.) HTML

In HTML gehört folgender Tag in den „Kopf“, also zwischen
und .

Noch dazu müssen Formulare auf UTF-8 umgestellt werden.

3.) MySQL

Sowohl bei der Erstellung der Datenbank als auch bei der
Erstellung von Tabellen muss UTF-8 als „default character set“
angegeben werden.

nein muss nicht,
ich arbeite mit latin-swedish bei create , eben mein default.
nutze dann aber mysql_query(‚SET NAMES ‚utf8‘‘);
Ich hab mal versucht die datenbank und tabellen in utf-8 zu convertieren , muss aber sagen das das erst recht die umlaute etc nur zerstört hat. Und auslesen wandern einlesen wollt ich mir dann doch nicht geben .

bisher hab ich damit alle weltzeichen im browser sehen können . gerade meine russichen freunde sind jetzt glücklicher :smile:

Hi,

utf-8 ist eine gute Wahl. Allerdings darf die Kodierung nicht den Serverangaben widersprechen, denn diese gehen vor.

Das heißt: meta-Angaben im HTML sind nur nötig und sinnvoll, wenn der Server keine Kodierung sendet. Wenn Dein PHP-Header also gesendet wird, kannst Du Dir das sparen. Wenn nicht und der Server sendet eine ISO-Kodierung, kannst Du utf-8 vergessen.

Gruß
Ingo

So, ich habe nun alles, was ich in meinem EP erwähnt habe, in meine Website gepackt und es scheint zu funktionieren. Ich trage z.B. über meine Website mittels HTML Formular den Wert „Österreich“ in meine Datenbank ein. Wenn ich den Datensatz über die MySQL Konsole Abrufe, scheint das „Ö“ auch als „Ö“ auf. Benutze ich das Suchformular meiner Website und suche nach „Osterreich“ erscheint ebenfalls „Österreich“, was für Personen ohne deutsche Tastatur grundsätzlich sehr hilfreich ist.

Den HTML Tag kann/soll ich weglassen, wenn ich den PHP Header aufrufe? Wie sieht es mit meinen HTML Formularen aus? Kann ich auf ebenfalls verzichten?

Diese Zeile in PHP, nach der Verbindung zur Datenbank, ist wohl unverzichtbar, oder?

$mysqli->set_charset(„utf8“);

Daten habe ich zum Glück noch keine in meine Datenbank eingetragen, dadurch kann ich noch nicht viel kaputt machen :wink:

Hinweis , unwarscheinlich aber war :

Bei meinem linux Debian Server mit Apache2 und utf-8 kann ich immoment nur UTF-8 ohne Boom files nehmen , ansonsten hauts mir meine includes als „pre-send data before headers“ raus .Mein Notepadd war auf UTF-8 mit Boom (alos windows like :smile: Da erkennt der Server (bei meiner standard config) leider den Boom nicht und wirft ein Zeichen aus , header müssen aber vor jeden klartext kommen, ergo die Fehlermeldung .

Wenn ich das richtig interpretiere - mit PHP beschäfitge ich mich erst seit wenigen Monaten - sollte ich meinen Header am besten vor session_start() und require_once() starten.

Wenn ich das richtig interpretiere - mit PHP beschäfitge ich
mich erst seit wenigen Monaten - sollte ich meinen Header am
besten vor session_start() und require_once() starten.

Ne , wichtig ist nur das erst alle header gesendet werden befor irgent ein zeichen kommt. Header sind http protokoll und nicht HTML :smile:
lese mal bei php header http://php.net/manual/de/function.header.php

p.s. wo ist denn das menu hier geblieben lol . ich hoffe der link funzt.

Mir ist gerade aufgefallen, dass IE meine mittige Zentrierung der Seite (per CSS) nicht übernimmt, wenn meine Dateien UTF-8 kodiert sind. Es funktioniert erst wieder, wenn ich die Kodierung auf „UTF-8 ohne BOM“ (in meinem Fall in Notepad++) umstelle.

Hi,

Den HTML Tag kann/soll ich weglassen, wenn ich den PHP
Header aufrufe?

im Prinzip ja - der ist dem HTTP-Header nachrangig. Allerdings könnten vom User gespeicherte Seiten (mangelns HTTP-Header) dann fehlerhaft angezeigt werden.

Kann ich auf ebenfalls
verzichten?

theoretisch ja. Sicherheitshalber würde ich dies (bei geringem Aufwand) aber einbinden.

Gruß
Ingo

BOM ist generell out für’s WWW

Ja, ich habe gesehen, dass auch andere Personen dasselbe Problem hatten. Mit Notepad++ hat das Speichern als „UTF-8 ohne BOM“ dann leider doch nicht so recht geklappt, die Daten waren z.T. nach dem Öffnen wieder als „ANSI“ kodiert. Ich habe mir daher die Demo Version von Ultraedit geladen. Damit scheint jetzt alles zu funktionieren.

Du musst unter Einstellungen-> Option einstellen , öffnen als UTF-8 , wer will kann auch noch ANSI als UTF8-8 offnen erzwingen.

Dann bleibt es ohne Boom , wie gesagt, ist es ein windows server ist es egal , aber bei nicht windows systemen ist halt anders.