Was heißt "du nimmst"? Entweder deine Daten sind UTF-8-kodiert _und_ du deklarierst das auch so, oder du bekommst ein nicht sinnvolles (oder nur zufällig richtiges) Ergebnis. Wenn du das Replacement Character siehst, dann ist UTF-8 deklariert, aber es kommt keine gültige UTF-8-Bytesequenz sondern zum Beispiel ein einzelnes Zeichen aus dem Bereich 80..FF, was die Nicht-ASCII-Zeichen in ISO-8859 sein können. Der andere Fall ist, dass eine UTF-8-Sequenz kommt, aber ISO-8859-1 deklariert ist. Dann werden die Bytes der Sequenz als je ein Zeichen interpretiert.
Mit nehmen meinte ich dass ich einen header setze in der php-Datei.
header('Content-type: text/html; charset=utf-8');
Hast du dich mal informiert, wie es richtig gemacht wird? Beispielsweise da: SELFHTML-Wiki - Zeichencodierung/MySQL.
Ich habe mir das mal angesehen und versucht per mysql_set_charset('utf8', $conn);
die Verbindung zur Datenbank auf utf8 zu setzen. Ergebnis war die Fehlermeldung:
Ausführen der Abfrage nicht möglich: Illegal mix of collations (latin1_german2_ci,IMPLICIT) and (utf8_general_ci,COERCIBLE) for operation 'like'
was dann wohl zeigt welche Codierung die Datenbank hat. (Mir fehlen im Moment die Zugangsdaten zu phpmyadmin aber bei dieser Codierung bin ich ziemlich sicher dass einfach die Standardcodierung genommen wurde)
Ich kenne jetzt keine Codierung die ich jetzt da für den Header nehmen könnte. Am Liebsten wäre es mir natürlich wenn die Livesuche mit jeder Art von Codierung umgehen könnte. Wäre es zB möglich einen String zu nehmen und per php-Funktion die Codierung zu bestimmen? So dass je nach Ergebnisursprung die richtige Codierung benutzt würde?
Und den Kontextwechsel solltest du auch beachten, wenn du keine SQL-Injection-Lücken haben möchtest.
Ich hab jetzt mysql_real_escape_string() dazu...
Die Frage ist, an welcher Stelle du das feststellst. Direkt nach dem Auslesen aus dem DBMS oder erst im Browser? Hast du dem DBMS mitgeteilt, in welcher Kodierung du die Daten haben möchtest? Stehen sie korrekt kodiert im DBMS (im phpMyAdmin muss alles richtig angezeigt werden)? Und im weiteren Verlauf: Teilst du dem Browser mit, welche Kodierung er zu erwarten hat?
Ich habe jetzt mal den header-tag weggelassen und das Ergebnis sieht genauso aus wie wenn ich utf8 verwendet hätte. Also text ok aber buchstabe nicht. Außerdem scheint irgendwas mit der Interpretation nicht zu stimmen. Denn in utf8 bzw keinem header werden links mit einem umlaut falsch interpretiert. ZB. ~~~html <a href="index.php?id=elektrogeraete" class="internalLink">Elektrogeräte</a><br />
`<a class="internalLink" href="index.php?id=elektroger">Elektroger</a>äte`{:.language-html}
Also sowohl der Link als auch der Anker falsch. Was für ein Thema...
> Es kommt nicht direkt auf das große Ganze an, weil jedes Request-Response-Paar ein eigenständiges Gebilde darstellt und zwei dieser Paare durchaus jeweils unterschiedliche Kodierungen verwenden können. Wenn du mit anderen Teilen interagierst, musst du natürlich deren Gegebenheiten beachten, wenn du sie nicht umstellen kannst.
Klingt nach einer ziemlich undynamischen Sache wenn man das nicht automatisiert auswerten und verarbeiten könnte. Ich hoffe das geht irgendwie... Schließlich wäre es ziemlich nervig wenn man bei einer neuen Implementierung das Ganze wegen anderer Codierung wieder per Hand umstellen müsste.