• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

PHP / MYSQL: Spezielle Zeichen in Datenbank speichern + Sicherheit

Scubus

Neues Mitglied
Hallo!
Ich habe mir ein Kommentar-Script gebastelt, bei dem der User einen Input auf meine Datenbank laden kann. Auf einer anderen Seite kann man dann den Kommentar sehen.

Jetzt habe ich zwei Fragen:
Bin ich vor gefährlichen Scripten geschützt, wenn ich alle Inputs via

$string = htmlentities($string);

prüfe?

Zweite Frage:

Ich möchte gerne auch "spezielle Zeichen" wie †, «, ▲ in der Datenbank speichern.
Bloss: wie mache ich das? Welche Kollation in MYSQL brauche ich? Oder muss ich was anderes ändern? Muss ich den String evtl. umwandeln bevor ich ihn in die Datenbank eintrage und dann beim herauslesen wieder zurücktransferieren?

(Mit dem Script das ich jetzt habe werden nur Zeichen à la "â�²" ausgegeben für diese 'speziellen Zeichen'.)
 
Werbung:
Du musst die Verbindung zwischen PHP und der DB, die PHP-Datei sowie die Übertragung zum Client auf UTF-8 stellen.

zu 1:
Stelle direkt nach Verbdindungsaufbau zur Datenbank eine Abfrage:
Code:
SET NAMES 'utf8'
(muss bei jeder Anfrage ausgeführt werden, ausser du hast Zugang zur Shell)

zu 2:
Nutze einen Editor, welcher Dateien in verschiedenen Zeichensätzen abspeichern kann, und speichere (möglichst alle) Dateien als UTF-8 ab.
(Windows Editor oder Phase 5 können es nicht, Beispiel wäre Notepad++)

zu 3:
Füge an den Anfang des PHP-Scriptes ein
PHP:
header("Content-Type: text/html; charset=utf-8");

Dann sollte das gehen. Wenn du Zugang zu PHPMyAdmin hast, kannst du die Kollation der Tabellen noch auf utf8_bin setzen.
 
Du musst die Verbindung zwischen PHP und der DB, die PHP-Datei sowie die Übertragung zum Client auf UTF-8 stellen.

zu 1:
Stelle direkt nach Verbdindungsaufbau zur Datenbank eine Abfrage:
Code:
SET NAMES 'utf8'
(muss bei jeder Anfrage ausgeführt werden, ausser du hast Zugang zur Shell)

zu 2:
Nutze einen Editor, welcher Dateien in verschiedenen Zeichensätzen abspeichern kann, und speichere (möglichst alle) Dateien als UTF-8 ab.
(Windows Editor oder Phase 5 können es nicht, Beispiel wäre Notepad++)

zu 3:
Füge an den Anfang des PHP-Scriptes ein
PHP:
header("Content-Type: text/html; charset=utf-8");
Dann sollte das gehen. Wenn du Zugang zu PHPMyAdmin hast, kannst du die Kollation der Tabellen noch auf utf8_bin setzen.

Hallo, Danke für die Antwort!
Muss ich aber 3. bei jeder Seite einfügen, die etwas mit dem ganzen zu tun hat? Also Input, Verarbeitung, Output? Sollte ich das nicht gerade auf allen Seiten einfügen?
Oder hat das UTF-8-Format Nachteile?

 
Werbung:
UTF-8 hat keine Nachteile, es wird weltweit unterstützt und bietet alle gängigen Zeichen. Es ist der am meisten genutzte Zeichensatz und du solltest ihn auf allen Seiten verwenden, wenn möglich auch auf HTML-Seiten, entweder mit dem oben genannten Code, oder dem meta-tag:
HTML:
<meta http-equiv="Content-Type" content="text/html;charset=utf-8">
welchen du als erstes innerhalb der head-Tags einfügen musst.

http://blog.antikoerperchen.de/beitrag/42/utf-8-und-die-entity.html
 
Zuletzt bearbeitet:
Gut. Habe jetzt alles erledigt bis auf 1. (SET NAMES 'utf8').
Könnte ich das nicht irgendwo einstellen, sodass ALLE mysql-connections so aufgebaut werden?
 
Ja, wenn du Zugriff auf die MySQL-Shell hast. (hat man idR aber nur, wenn man einen ganzen Root oder Virtual Server mietet)
 
Werbung:
Ja, wenn du Zugriff auf die MySQL-Shell hast. (hat man idR aber nur, wenn man einen ganzen Root oder Virtual Server mietet)
Okay, habe ich erledigt. Jetzt habe ich noch eine letzte Frage :):
entspricht das UTF-8 Format dem "C (kanonische Dekomposition, gefolgt von kanonischer Komposition) + Unicode-Signatur [BOM] einschliessen" des Adobe Dreamweavers CS5? (Das benutz ich)
 
Zuletzt bearbeitet:
Werbung:
Nicht set names verwenden, wenn du MySQL 5 und PHP5.2.3 oder größer verwendest!
mysql_set_charset() ist dafür vorgesehen.

Außerdem reicht htmlspecialchars vollkommen in UTF-8, htmlentities ist da nicht wirklich nützlich.
 
Werbung:
Zurück
Oben