UTF-8 Unicode Problem

Deacon_Frost

Grünschnabel
Hallo,

das ganze wirkt auf mich etwas komplex, daher wird es mir wahrscheinlich selbst schwerfallen das ganze "richtig" zu erklären. Ich hoffe es gelingt mir :(.

~~~~~~~
Problem anzeigen Polnischer zeichen in einer Suchausgabe/Suche:

/**Datenbank:
Also :) : Ich habe eine Datenbank (MySQL) deren Zeichensatz utf8_unicode_ci
ist. Auch die einzelnen Tabellen und die Tabellenfelder haben diesen Zeichensatz.

Je nach Inhalt (wird von 2 Personen gepflegt), gibt es eine Tabelle mit deutsch einträgen und eine mit polnischen. Die Daten selbst werden über phpMyAdmin eingepflegt.

Sowohl in phpMyAdmin werden daraufhin auch die deutschen und pol. sonderzeichen Angezeigt.

/**Ausgabe PHP/HTML:
Gebe ich nun diese Parameter mittels PHP auf meine Website aus, muss ich mir mittels der Funktion: utf8_encode(), behelfen. Natürlich klappt das nur für die deutschen Sonderzeichen :( da iso....-1 .

Eigentlich sollte die Seite aber alle Sonderzeichen richtig anzeigen, da die Formatierung der Seite UTF-8 ist.

Code:
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

/**Senden aus Formularen (zur Suche)
Das ganze wird noch irrwitzger, wenn ich die Daten aus einem Eingabefeld an eine Suchseite sende, dann muss ich die Übergebenen Parameter (aus dem inputfeld) wiederrum decodieren (zur Suche) und zur Ausgabe wieder encoderien.. und das nur für die Deutschen Umlaute.
Sende ich Umlaute auf polnischen, kommieren die richtig an können jedoch in der Suche nicht gefunden werden, obwohl Copy und Paste der where clause in phpmyadmin zum erfolg führen.




Also wie gesagt mir fällt es selbst schwer alle Ungereimtheiten wiederzugeben. Ich hoffe jemand, kann das nachvollziehen, oder sich darunter etwas vorstellen. Wenn jemand ernsthaft interesse zeigt, kann man mich auch gerne per PM kontaktieren. (Zumindest bis zum 1.9, dann bin ich 2 Wochen ohne PC).

MFG und LG für jeden, der sich das geschriebe angetan hat und alle anderen auch;)
Christian
 
Die Angabe der verwendeten Zeichenkodierung im Nachrichtenkörper selbst – in diesem Fall dem HTML-Quellcode – ist eindeutig zu spät. Denn bereits vorher muss der User Agent wissen, womit er es zu tun hat. Daher gib diese Informationen mal zusätzlich im Header der HTTP-Antwort an:
PHP:
header('Content-Type: text/html; charset=UTF-8');
 
Hallo,

gerade eben auch schon probiert und geht nicht. :(

PHP:
<?
header("Content-type: text/html; charset=UTF-8");
/* build standard variables for system */
session_start();

Dies steht in der index.php die weiteren beiden betroffenen Dateien werden dorthin includiert.

Das "Lustige" ist folgendes suche ich im "phpMyAdmin" mit folgendem query:

PHP:
SELECT * FROM eintraege_pl WHERE (NAME LIKE '%Pawe?%'OR VORNAME LIKE %Pawe?%')

Bekomme ich einen Treffer. Und wenn meine "class.database.php" selbigen qry absetzt, bekomm ich 0 treffer. Wobei der Wert, der im Suchfeld wieder ausgeben ist, richtig formatiert ist. Gleiches Problem auch bei "Müller" als Suchwert.

Es liegt anscheinend an der Datei/Code der includierten .php Datei oder an der Kommunikation, der selbigen, wobei das an sich nicht sein kann. :( Denn Werte abspeichern etc. mittels Umlauten und Sonderzeichen anderer Art geht.

// edit

Nachtrag, wenn ich in einem Formular Daten in UTF-8 Speicher,
kommen Sie im phpMyAdmin so "raus":

:suspekt:

üüüüPaweł

mache ich das verfahrung umgekeht, stehen im den Textinput-Felder bei der Ausgabe Fragezeichen:

????

Schalte ich dann das Character Encoding in meinen Firefox auf Western um, stehen da schöne "ü's".

Kann das sein, das meine Kommunikation Apache(php_module) <> MySQL auf Western ist? :suspekt:
 
Wenn du mit UTF-8 arbeiten möchtest, solltest du am besten alles auf UTF-8 umstellen. Das heißt auch die PHP-Skriptdateien und mögliche HTML-Dateien sollten in UTF-8 gespeichert sein, damit es keine Konflikte gibt. Dann ist auch die utf8_encode()-Funktion nicht mehr notwendig. In Formularen sollte zusätzlich das Attribut „accept-charset="utf-8"“ gesetzt sein, obwohl laut Spezifikation bei einem UTF-8-kodierten Formular auch UTF-8 als Kodierung der abzuschickenden Werte verwendet werden soll. Doch sicher ist sicher.
 
Hallo zusammen!

Suche ebenfalls nach einer Lösung des Problems.

Die MySQL-Datenbankfelder und die Forumulareingabefelder sind bereits UTF-8 codiert. Es sind also in der Datenbank alle polnischen und deutschen Sonderzeichen/Umlaute sichtbar. :rolleyes:

Die Anzeige im Frontend sieht dann trotzdem so aus...
Code:
Znajd? tu Pa?stwo wiele obiekt?w G?rlitz i Zgorzelca...
 
Zuletzt bearbeitet:
Hi, versuch mal als erstes nach dem Verbinden zur Datenbank folgende Query zu senden:

Code:
SET NAMES 'utf8'

Ich weiss nicht ob das hilft, aber einen Versuch ist es sicher wert.
 
Hallo an alle, hallo EvilO!

Das funktioniert! ;-)

Habe direkt nach dem db-connect folgende Zeilen eingebunden...
Code:
mysql_query("SET NAMES 'utf8'");
mysql_query("SET CHARACTER SET 'utf8'");

Danach musste ich wieder alle ...
PHP:
utf8_encode
... Anweisungen entfernen und deutsche Umlaute im PHP-Ausgabetemplate utf-8 codieren, also z.B. bereitete das "ß" Probleme...
Code:
ß > ß
Auf folgender Übersichtsseite ist eine ganz gute Übersicht zu finden.

Danke nochmals und schönes Wochenende! ;-)
 
Zuletzt bearbeitet:
Hallo,

danke für das tolle Engagement!

Mein Problem wurde mit:

mysql_query("SET NAMES 'utf8'");
mysql_query("SET CHARACTER SET 'utf8'");

Obwohl ich ALLE (so glaube ich) Apache,Mysql,Linux - Variablen auf UTF-8 gesetzt hatte, unterhielten sich wohl mein PHP Script und die Mysql-DB auf Latin :confused: .

Durch das setzten der 2 Variablen zur Laufzeit des Scripts funktioniert nun alles wunderbar ohne legliches decodieren oder encodieren! TOP.

grüße
christian
 
Zurück