![]() |
Umgang mit Sonderzeichen bei PHP und SQL
Hallo,
ich sitze gerade an einem neuen Projekt und benötige dafür PHP und SQL-Datenbanken. Ich hatte immer Ärger mit den Sonderzeichen, diesmal will es aber von Vorneherein richtig machen. :D Ich möchte über ein Textarea / Input etwas mit PHP und SQL in die Datenbank schreiben, genauso wie es dadrin steht. Und genauso möchte ich es auch ausgeben. Also auch die Sonderzeichen sollen problemlos ausgegeben werden. Jetzt bietet PHP die Möglichkeit die Sonderzeichen vorher in Codes o.ä. umzuwandeln, aber wann ich welche Funktion benutzen soll, weiß ich immer noch nicht. :D Wie löst ihr das? Unter Sonderzeichen verstehe ich alles, was sich auf einer normalen QWERTZ-Tastatur befindet (von ä, ö, ü über $ § %, etc.) |
Re: Umgang mit Sonderzeichen bei PHP und SQL
Ganz einfach: Den Text, der Sonderzeichen enthält (und der vom Benutzer eingegeben wird), musst du mittels htmlentities umwandeln. htmlentities macht dann Beispielsweise ä aus ä. Diesen umgewandelten Text speicherst du in der Datenbank. Bei der Ausgabe musst du dann nix weiter beachten.
Theoretisch kannst du auch den originalen Text speichern. Dann musst du aber bei jeder Ausgabe htmlentities aufrufen, was natürlich insgesamt gesehen einen höheren Rechenaufwand (= Kosten) bedeutet. |
Re: Umgang mit Sonderzeichen bei PHP und SQL
Okay, verstanden habe ich es, danke. :D
Ich bin mal gespannt, ob das auch so prima funktioniert. :D Den Befehl kenne ich ja schon, aber ich hatte damals trotzdem Probleme mit " oder ' |
Re: Umgang mit Sonderzeichen bei PHP und SQL
Text in Entities umzuwandeln ist generell eine dumme Idee. Denn nicht immer muss der Output HTML-Encoded sein, mal ganz davon abgesehn dass es absolut unnoetig ist.
Achte darauf, dass deine Datenbank, die Verbindung zur Datenbank und die HTML-Seite alle dieselbe Zeichencodierung verwenden, und du wirst keine Probleme haben ;) Greetz alcaeus |
Re: Umgang mit Sonderzeichen bei PHP und SQL
Zitat:
Dann gehen wir doch mal davon aus, dass in der HTML-Seite diese "Standard"-Zeile steht:
Code:
In der DB habe ich sowas nicht zum auswählen. Standard ist i.d.R. "latin1_swedish_ci". Mein Gefühl sagt ich sollte eher "utf8_unicode_ci" verwenden. :mrgreen:
<meta http-equiv="content-type" content="text/html; charset=iso-8859-1">
Was ist denn nun das richtige? :stupid: EDIT: War gestern abend schon ein bisschen spät :p "charset=utf-8" und "utf8_unicode_ci" müsste klappen, oder? |
Re: Umgang mit Sonderzeichen bei PHP und SQL
Zitat:
Delphi-Quellcode:
Zeichen, die ausserhalb des ASCII-Bereichs liegen, kann man dann entweder UTF-8 kodiert, oder in numerischer Notation in die HTML Datei schreiben.
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
![]() In Selfhtml wird noch ein pikanter Hinweis gegeben: Zitat:
![]() |
Re: Umgang mit Sonderzeichen bei PHP und SQL
Verwende auf DB-Ebene und soweit möglich auf PHP-Ebene Unicode und erst zur Anzeie HTML und du wirst du wenigesten Probleme.
|
Re: Umgang mit Sonderzeichen bei PHP und SQL
Moin,
mit UTF-8 oder UTF-16 faehrst du heutzutage am geschicktesten. Beachte aber, dass PHP keine Multibyte-Strings kennt, das funktioniert erst in PHP 5.3 oder sogar erst PHP 6. Das hat zur Folge dass z.B. strlen() bei Multibyte-Strings falsche Ergebnisse liefert. Es gibt allerdings die mb_string-Extension, die mit Multibyte-Strings umgehn kann. Was das andere charset betrifft: iso-8859-1 ist auch als latin1 bekannt, du koenntest also latin1_binary verwenden. Beachte bei der Collation also auch, dass saemtliche Charsets mit einem _ci am Ende case-insensitive sind, da ist Matze letztens schon drueber gestolpert ;) Ansonsten kann ich Bernhard nur zustimmen - HTML hat erst ausserhalb der DB was zu suchen. In der DB solltest du allerhoechstens eingegebenen HTML-Code mit htmlspecialchars() entschaerfen, damit du das nicht bei jedem Anzeigen machen musst. Greetz alcaeus |
Re: Umgang mit Sonderzeichen bei PHP und SQL
Zitat:
, etc. zum Formatieren von News, etc. Der Header der HTML-Seite sieht momentan so aus:
Code:
Wenn ich jetzt auf der Seite direkt "Ä" (also ohne Ä im Body-Bereich) eingebe, kommt bei Schwarzer Schrift auf weißem Hintergrund im FF eine schwarze Raute mit weißem Fragezeichen und im IE ein weißes Rechteck mit schwarzem Rahmen raus. Liegt das jetzt daran, dass die Datei auf meinem lokalen Rechner (XAMPP) ASCII-codiert ist? :?
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html> <head> <meta http-equiv="content-type" content="text/html; charset=utf-8"> [...] </head> |
Re: Umgang mit Sonderzeichen bei PHP und SQL
Zitat:
Greetz alcaeus |
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:13 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz