SQL mySQL und UTF-8

Belee

Lt. Commander
Registriert
Dez. 2006
Beiträge
1.518
Hi

Hab ein Problem was ich nicht gelösst bekomme und hoffe auf Hilfe.

Meine Datenbank läuft auf UTF-8, alles was dazu nötig ist, ist auch so eingestellt worden.

Nun, lege ich einen Datensatz der z.B. so ausschaut an:

Tom & Jerry

In einem Formular dann nach ,,Tom & Jerry,, suche, wird nichts gefunden.
Ändere ich aber in der Datenbank das & in & um und suche dann nach...

Tom & Jerry, dann wird der Eintrag gefunden.

Das kann aber so nicht richtig sein oder?

Das Suchformular sieht so aus:
<form action="xxx" method="post" accept-charset="utf-8">

Was mache ich hier falsch?

Wie gesagt, die Datenbank ist UTF-8, die Webseite ist auch auf UTF-8 eingestellt,
auch in der php.ini wurde der default charset und mimetype auf utf-8 eingestellt, doch
trotzdem muss ich & als &amp; in die Tabelle eitragen, warum?

Danke!
 
Probiers mal mit
PHP:
mysql_query("SET NAMES 'utf8'");
nach dem die DB-Verbindung hergestellt ist.

Hat mir bisher bei allen Sonderzeichenproblemen geholfen :)
 
$db = new mysqli("localhost", "user", "pass", "db");
$db->set_charset("utf8");

das dürfte helfen

und für html seite

<meta http-equiv="Content-Type" content="text/html; charset=utf-8">


edit: Mr. Snoot Funktion ist für das alte SQL und meins für das neue Sqli also must schauen welches du nutzt und dann sein oder meins versuchen ;)
 
Zuletzt bearbeitet:
ist die website selbst als utf8 gekennzeichnet?

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>

und in der apache config
AddDefaultCharset UTF-8

allerdings sollte & immer escaped werden, weils ein steuerzeichen ist. daran ändert utf-8 nichts.
 
Sind deine Dateien selbst auch als UTF-8 gespeichert? Du kannst das z.B. mit Notepad++ (rechts unten) oder jedem anderen Editor nach dem Öffnen überprüfen.
 
Mir wäre es neu, dass ein Kaufmanns-Und als HTML-Entity in der Tabelle stehen muss. Nur wenn du die Daten aus der DB holst, müssen HTML-Entities übersetzt werden. Bist du sicher, dass die Daten auch korrekt ankommen?
 
Nach der Verbindung habe ich das:

mysql_set_charset("uft8");

@all
Ja alles aber wirklich auch alles ist auf UTF-8 eingestellt.

Kann es eventuell daran liegen?
$search = htmlspecialchars($_POST["sucheX"]);
 
Tatsache, es liegt an htmlspecialchars. Klar, es wird ja nach &amp; gesucht :(

Aber ohne ist das doch nicht mehr sicher oder? und was meinst du genau mit ,,als Parameter,,?

Meinst du ich soll htmlspecialchars drin lassen aber das & durchlassen? also quasi nach htmlspecialchars das &amp; wieder in & wandeln?
 
Zuletzt bearbeitet:
Die Kombination macht es aus.
HTML/Skript-Dateien in UTF8 (ohne BOM) speichern.

PHP:
mysql_query('SET NAMES utf8');
mysql_query("SET CHARACTER SET utf8");
header("Content-type: text/html;charset=UTF-8");
HTML:
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
Und das im HTML wurde auch schon genannt.

Erst diese Kombination erlaubte es mir z.B. kyrlische Schriftzeichen mitzuspeichern und ohne Probleme wie mit jedem anderen lateinischen Buchstaben umzugehen.
 
Zuletzt bearbeitet:
Richtig, es ist überflüssig. SET NAMES alleine genügt. Alternative wäre den MySQL-Server bereits in seinen Settings auf UTF-8 zu stellen. Aber das wäre dann nichtmehr portabel.
 
Was ich noch nicht ganz verstehe. Wenn man z.B. 2 von einander unabhängige Sachen auf einer Seite hat die auf die Datenbank zugreifen, muss ich ..

PHP:
mysql_query('SET NAMES utf8');

in beiden Scripte angeben?

Ich denke schon oder? fall ja, ich lagere die Datenbank Connect Daten in ein kleines PHP-Script aus welches ich dann in den Script includieren, kann ich nicht auch SET NAMES hier auslagern? bin noch nicht ganz so fit in Sachen MySQL , deshalb entschuldigt diese Frage(n).
 
Alle SQL-Verbindungen die mit UTF-8 arbeiten sollen müssen mit SET NAMES utf8 initialisiert werden.
 
Zurück
Oben