Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

[MSSQL-PHP] Umlaute richtig in die Datenbank schreiben

Empfohlene Antworten

Veröffentlicht

Hallo zusammen,

ich habe ein kleines Problem.

Und zwar schreibt PHP die Umlaute die in Eingabemasken eingegeben wurden sind, nicht korrekt in die Datenbank.

Habe mich jetzt schon ein wenig Schlau gemacht und viel rumprobiert.

HTML-Charset = UTF-8

Wenn ich das Charset im HTML-Tag weg nehme, schreibt er die richtigen Umlaute in die Datenbank, stellt dafür natürlich aber nur Fehler am Bildschirm da.

D.h. ich bräuchte irgendwie eine Konvertierung beim inserten, von UTF-8 auf UCS-2 ist das mein ich, von MSSQL.

Wäre echt klasse, wenn einer von euch ne Idee hat.

Gruß

Ich meine, ohne mich jetzt darauf fest zu nageln, dass PHP intern alles ISO-Latin-1 handelt, d.h. wenn Du UTF8 Daten in Deine PHP Datei bekommst, musst Du diese via utf8_decode decodieren und dann eben passend für Deine Datenbank codieren, bevor Du sie schreibst.Wenn Du Daten aus der Datenbank holst, musst Du sie eben für PHP wieder nach ISO Latin codieren und wenn die Ausgabe UTF8 sein soll, eben mit utf8_encode passend codieren.

Evtl hilft Dir PHP: mb_internal_encoding - Manual weiter, aber Du müsstest das halt generell überall konsequent einsetzen. Alternativ würde ich die Datenbank auf UTF8 umstellen.

Und zwar schreibt PHP die Umlaute die in Eingabemasken eingegeben wurden sind, nicht korrekt in die Datenbank.

Zeig mal den Betreffenden Quellcode.

Sonst ist es das Problem nicht nachvollziehbar.

Vermutung:

Vielleicht behandelst du die Formulardaten falsch, bevor du sie in die Datenbank speicherst.

Tipp:

Die Formulardaten, immer mit mysql_real_escape_string behandeln, bevor sie in die Datenbank gespeichert werden.

Die Verbindung zur DB und die Standardzeichencodierung spielt bei MSSQL-DBs da nicht so die große Rolle.

Neben dem im Header angegebenen Zeichensatz kommt es ebenfalls auf die Codierung der PHP-Dateien an. Diese müssen ebenfalls als UTF-8 Datei auf dem Server liegen.

Aus dem phpforum.de: UTF-8 - PHP Forum: phpforum.de

  • Dateien (PHP-Dateien, CSS-Dateien, JS-Dateien, usw. usf.) müssen in UTF-8 gespeichert werden.
  • Daten in der Datenbank (Daten in Tabellenzellen)
  • Verbindungen zu Datenbanken (Der Weg, auf dem die Daten von PHP zur Datenbank geschickt werden)
  • Anzeige im Client (Dem Browser muss mitgeteilt werden, dass die Webseite in UTF-8 vorliegt)

user@host:~> echo $LANG

de_DE.UTF-8

user@host:~> php -m | grep iconv

iconv

user@host:~> php

<?php
$input = "Dies ist ein Satz mit Umlauten: ÄÖÜäöüß";
$ucs2 = iconv("UTF-8","UCS-2",$input);
echo "UTF-8 => $input \t UCS-2 => $ucs2\n";
?>[/PHP]

UTF-8 => Dies ist ein Satz mit Umlauten: ÄÖÜäöüß UCS-2 => Dies ist ein Satz mit Umlauten: �������

Könnte helfen.

Kann man aber nur machen, wenn man auf die Konsole kommt, was bei einem Webhoster wohl nicht möglich ist.

Richtig. 95% der Leute schauen idR dann auf ihr phpinfo(), da findet man auch alles. ;)

Andererseits ist die Wahrscheinlichkeit für einen Webhoster gering, da findet sich dann doch eher MySQL. Bei MSSQL gehe ich daher von einem internen/DMZ Setup aus - also mit guter Chance auf eine Shell.

Ich hatte oben auch nur das, was mir in den Kopf kam, auf der Shell getestet und in den Thread gepostet. Der TE kann sich dann ja seine Gedanken dazu machen.

Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.