PHP Problem mit Encoding bei DB Verbindung

Einhörnchen

Rear Admiral
Registriert
März 2007
Beiträge
5.180
Habe ein Problem das mich bald verrückt macht, evtl. kann mir jemand helfen...

- Die Datenbank ist in UTF8 (SQLite3)
- Die Web-Anwendung ist in ISO-8859-1
- Die Ausgabe funktioniert mit utf8_decode($datenbankwert) problemlos
- Problem: Die Suche funktioniert nicht

Was ich bereits herausgefunden habe:
  1. Wenn ich die Kodierung der Website auf UTF8 ändere und dann das Suchformular abschicke, funktioniert die Suche (allerdings müsste ich dann große Teile der Website anpassen, worauf ich wenig Lust habe)
  2. Wenn ich die Kodierung auf ISO belasse und das Surchformular abschicke, geht es nicht
  3. Wenn ich die Kodierung auf ISO belasse und das Suchformular abschicke, bei der DB-Abfrage aber ein utf8_encode ausführe, geht es nicht (obwohl die Zeichenkette die an die DB geht dann identisch ist wie in Variante 1)
Insbesondere der 3. Punkt bringt mich in den Wahnsinn. habe auch schon
Code:
$pdoHandler->query("SET CLIENT_ENCODING TO 'utf8';");
$pdoHandler->query("SET CHARACTER SET 'utf8';");
$pdoHandler->query("SET NAMES 'utf8';");
versucht (mit Hochkomma, ohne, mit - zwischen utf-8, ohne), hilft alles nichts.

Jemand eine Idee?

Ist PHP 51.4 in Verbindung mit pdo_sqlite.
 
Du solltest eine einheitliche Kodierung verwenden.


Wenn du (aus welchen Gründen auch immer) gezwungen bist, latin1 zu verwenden, dann benutze auch in der Datenbank latin1.
Damit meine ich nur die Connection, sondern auch die Tabellen in der Datenbank.


Die Suche geht nicht. Dass heißt wohl dass sie nichts ausgibt - keine Fehlermeldung etc?
 
Das Suchwort wird wegen dem Umlait nicht gefunden (kein entsprechender Begriff in DB).

SQLite3 kann leider nur UTF8. Werde nun in den sauren Apfel beißen und die Website auf UTF8 umstellen (grrrrrr!!)
 
Hatte nur die Hoffnung dass sich hier zufällig jemand mit Erfahrung in PHP/PDO/SQLite3 rumtreibt und es einen einfachen Kniff gibt ;).
 
Naja, ehrlichgesagt kommt mir das Verhalten komisch vor, irgendwo muss ein Fehler sein.


Wenn du alles ISO machst, müsste es schon funktionieren.
 
Habe jetzt alles auf UTF8 umgestellt (weil die DB das eben erzwingt).

Das Problem ist, dass der Webserver so ein kleiner proprietärer nicht Open Source CD-ROM Server ist, kein echter Apache. D.h. ich habe relativ wenig Möglichkeiten den DB Zugriff zu kontrollieren, selbst PHP lässt sich nur eingeschränkt konfigurieren.

Der an die DB übergebene String war in beiden Fällen identisch, evtl. wird aber die DB Verbindung in einem anderen Zustand erzeugt (von besagtem seltsamen Server).
 
Bei mir funzte folgendes:

DB + Tables in utf-8

script im Editor in Ansi formatiert und gespeichert
Html Metas können in ISO sein

im script
header("Content-Type: text/html; charset=utf-8");

vor den sql queries:
query("SET NAMES 'utf8';");
 
Zurück
Oben