dedlfix: AJAX und Sonderzeichen

Beitrag lesen

Hi!

Denn wenn ich utf-8 als Codierung für den ajax nehme dann ist der Überschriftenbuchstabe ein Fragezeichen und die Texte bzw passenden Stickwörter sind korrekte Umlaute.
Wenn ich aber iso8859-1 nehme dann ist der Überschriftenbuchstabe korrekt aber nicht mehr die Sonderzeichen im Text.

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.

Also muss da sogar innerhalb eines Requests unterschiedliche Codierung da sein...

So sieht es aus.

Ich denke dass das vielleicht mit den Mysql-Requests zusammenhängt:

Hast du dich mal informiert, wie es richtig gemacht wird? Beispielsweise da: SELFHTML-Wiki - Zeichencodierung/MySQL.

$query = "SELECT ucase(SUBSTRING(ABC_Titel,1,1)) as sign from $dbtable where ABC_Titel like \"".$_GET['ajaxquery']."%\" group by sign";

Und den Kontextwechsel solltest du auch beachten, wenn du keine SQL-Injection-Lücken haben möchtest.

Das heißt für mich dass der einzelne Buchstabe aus der ersten Abfrage anders codiert sein muss als der String aus der zweiten Abfrage. Obwohl aus dem selben Feld. Oder nicht?

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 glaube nicht dass ich an den allgemeinen Codierungen groß etwas ändern kann weil mein Teil ist eigentlich nur eine Extension. Ein Glossar um genau zu sein. Wie die Datenbanken und restliche Webseitenteile formatiert sind darauf hab ich eigentlich keinen großen Einfluss...

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.

Lo!