AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Umgang mit Sonderzeichen bei PHP und SQL
Thema durchsuchen
Ansicht
Themen-Optionen

Umgang mit Sonderzeichen bei PHP und SQL

Ein Thema von Synollus · begonnen am 28. Feb 2009 · letzter Beitrag vom 1. Mär 2009
Antwort Antwort
Synollus

Registriert seit: 29. Dez 2008
49 Beiträge
 
#1

Umgang mit Sonderzeichen bei PHP und SQL

  Alt 28. Feb 2009, 23:25
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.

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.

Wie löst ihr das? Unter Sonderzeichen verstehe ich alles, was sich auf einer normalen QWERTZ-Tastatur befindet (von ä, ö, ü über $ § %, etc.)
  Mit Zitat antworten Zitat
Benutzerbild von Meflin
Meflin

Registriert seit: 21. Aug 2003
4.856 Beiträge
 
#2

Re: Umgang mit Sonderzeichen bei PHP und SQL

  Alt 28. Feb 2009, 23:29
Ganz einfach: Den Text, der Sonderzeichen enthält (und der vom Benutzer eingegeben wird), musst du mittels htmlentities umwandeln. htmlentities macht dann Beispielsweise &auml 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.
  Mit Zitat antworten Zitat
Synollus

Registriert seit: 29. Dez 2008
49 Beiträge
 
#3

Re: Umgang mit Sonderzeichen bei PHP und SQL

  Alt 28. Feb 2009, 23:31
Okay, verstanden habe ich es, danke.

Ich bin mal gespannt, ob das auch so prima funktioniert. Den Befehl kenne ich ja schon, aber ich hatte damals trotzdem Probleme mit " oder '
  Mit Zitat antworten Zitat
Benutzerbild von alcaeus
alcaeus

Registriert seit: 11. Aug 2003
Ort: München
6.537 Beiträge
 
#4

Re: Umgang mit Sonderzeichen bei PHP und SQL

  Alt 28. Feb 2009, 23:35
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
Andreas B.
Die Mutter der Dummen ist immer schwanger.
Ein Portal für Informatik-Studenten: www.infler.de
  Mit Zitat antworten Zitat
Synollus

Registriert seit: 29. Dez 2008
49 Beiträge
 
#5

Re: Umgang mit Sonderzeichen bei PHP und SQL

  Alt 28. Feb 2009, 23:54
Zitat von alcaeus:
Achte darauf, dass deine Datenbank, die Verbindung zur Datenbank und die HTML-Seite alle dieselbe Zeichencodierung verwenden, und du wirst keine Probleme haben
Sofern ich das jetzt richtig verstanden habe, soll die Kollation der Datenbank dieselbe sein wie der/das charset in den Meta-Daten?

Dann gehen wir doch mal davon aus, dass in der HTML-Seite diese "Standard"-Zeile steht:

Code:
<meta http-equiv="content-type" content="text/html; charset=iso-8859-1">
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.

Was ist denn nun das richtige?

EDIT: War gestern abend schon ein bisschen spät :p "charset=utf-8" und "utf8_unicode_ci" müsste klappen, oder?
  Mit Zitat antworten Zitat
mjustin

Registriert seit: 14. Apr 2008
3.006 Beiträge
 
Delphi 2009 Professional
 
#6

Re: Umgang mit Sonderzeichen bei PHP und SQL

  Alt 1. Mär 2009, 08:45
Zitat von Synollus:
Zitat von alcaeus:
Achte darauf, dass deine Datenbank, die Verbindung zur Datenbank und die HTML-Seite alle dieselbe Zeichencodierung verwenden, und du wirst keine Probleme haben
Sofern ich das jetzt richtig verstanden habe, soll die Kollation der Datenbank dieselbe sein wie der/das charset in den Meta-Daten?

Dann gehen wir doch mal davon aus, dass in der HTML-Seite diese "Standard"-Zeile steht:

Code:
<meta http-equiv="content-type" content="text/html; charset=iso-8859-1">
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.

Was ist denn nun das richtige?

EDIT: War gestern abend schon ein bisschen spät :p "charset=utf-8" und "utf8_unicode_ci" müsste klappen, oder?
Ja, UTF-8 ist empfehlenswert, wenn man sich nicht nur auf z.B. westeuropäische Sonderzeichen beschränken will.

<meta http-equiv="content-type" content="text/html; charset=UTF-8" /> Zeichen, die ausserhalb des ASCII-Bereichs liegen, kann man dann entweder UTF-8 kodiert, oder in numerischer Notation in die HTML Datei schreiben.

http://de.selfhtml.org/html/referenz...tm#allgemeines

In Selfhtml wird noch ein pikanter Hinweis gegeben:

Zitat:
Im Konfliktfall, also wenn der Webserver im HTTP-Header eine hiervon abweichende Angabe sendet, wird üblicherweise die Angabe des HTTP-Headers verwendet.
http://de.selfhtml.org/html/kopfdate...ichenkodierung
Michael Justin
habarisoft.com
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.201 Beiträge
 
Delphi 10.4 Sydney
 
#7

Re: Umgang mit Sonderzeichen bei PHP und SQL

  Alt 1. Mär 2009, 11:13
Verwende auf DB-Ebene und soweit möglich auf PHP-Ebene Unicode und erst zur Anzeie HTML und du wirst du wenigesten Probleme.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von alcaeus
alcaeus

Registriert seit: 11. Aug 2003
Ort: München
6.537 Beiträge
 
#8

Re: Umgang mit Sonderzeichen bei PHP und SQL

  Alt 1. Mär 2009, 15:13
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
Andreas B.
Die Mutter der Dummen ist immer schwanger.
Ein Portal für Informatik-Studenten: www.infler.de
  Mit Zitat antworten Zitat
Synollus

Registriert seit: 29. Dez 2008
49 Beiträge
 
#9

Re: Umgang mit Sonderzeichen bei PHP und SQL

  Alt 1. Mär 2009, 16:49
Zitat von alcaeus:
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
Ich danke euch erstmal. Klappt alles prima mit UTF-8. Ich speicher in der DB ja nur kleine Formatierungen wie [b], <u>, [i],
, etc. zum Formatieren von News, etc.

Der Header der HTML-Seite sieht momentan so aus:

Code:
<!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>
Wenn ich jetzt auf der Seite direkt "Ä" (also ohne &Auml; 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?
  Mit Zitat antworten Zitat
Benutzerbild von alcaeus
alcaeus

Registriert seit: 11. Aug 2003
Ort: München
6.537 Beiträge
 
#10

Re: Umgang mit Sonderzeichen bei PHP und SQL

  Alt 1. Mär 2009, 21:16
Zitat von Synollus:
Wenn ich jetzt auf der Seite direkt "Ä" (also ohne &Auml; 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?
Richtig. Eine Datei, welche im Latin1-Zeichensatz gespeichert ist, wird immer komische Sachen anzeigen. Speichere die Datei als UTF-8 und es geht wunderbar

Greetz
alcaeus
Andreas B.
Die Mutter der Dummen ist immer schwanger.
Ein Portal für Informatik-Studenten: www.infler.de
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:04 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz