Probleme mit Sonderzeichen
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
action
beispiel
beitrag
date
daten
description
erweiterung
event
funktion
herrgott
hieroglyphe
insert
rufen
set
sonderzeichen
stehen
update
vermutung
zeichensalat
zeichensatz
-
Hi,
ich habe so ein kleines Problem mit Sonderzeichen.
Immer wenn ich Daten in der DB speichere, dann werden das mehr so Hyroglyphen als alles andere.
Deswegen habe ich folgene Funktion geschrieben:
<?php function sonderzeichen ($sonderzeichen){ $sonderzeichen = str_replace('ö', '& ouml;', $sonderzeichen); $sonderzeichen = str_replace('ä', '& auml;', $sonderzeichen); $sonderzeichen = str_replace('ü', '& uuml;', $sonderzeichen); $sonderzeichen = str_replace('Ö', '& Ouml;', $sonderzeichen); $sonderzeichen = str_replace('Ä', '& Auml;', $sonderzeichen); $sonderzeichen = str_replace('Ü', '& Uuml;', $sonderzeichen); $sonderzeichen = str_replace('ß', '& szlig;', $sonderzeichen); $sonderzeichen = str_replace('%', '%', $sonderzeichen); $sonderzeichen = str_replace('$', '$', $sonderzeichen); $sonderzeichen = str_replace('@', '@', $sonderzeichen); return $sonderzeichen; } ?>
So und dann rufe ich sie so auf:
<?php error_reporting(E_ALL); include('../config.inc.php'); include('../includes/special_character.php'); $event_title = sonderzeichen(addslashes(htmlspecialchars($_POST['event_title']))); $event_date = sonderzeichen(addslashes(htmlspecialchars($_POST['event_date']))); $event_time = sonderzeichen(addslashes(htmlspecialchars($_POST['event_time']))); $event_place = sonderzeichen(addslashes(htmlspecialchars($_POST['event_place']))); $event_website = sonderzeichen(addslashes(htmlspecialchars($_POST['event_website']))); $event_desc = sonderzeichen(addslashes(htmlspecialchars($_POST['event_description']))); if(isset($_GET['changeid'])) { $a_query = mysql_query("UPDATE events set event = '".$event_title."', date = '".$event_date."', time = '".$event_time."', place = '".$event_place."', website = '".$event_website."', description = '".$event_desc."' WHERE id = '".$_GET['changeid']."'") OR die(mysql_error()); } else { $a_query = mysql_query("INSERT INTO events(event, description, place, date, time, website) VALUES('".$event_title."', '".$event_desc."', '".$event_place."', '".$event_date."', '".$event_time."', '".$event_website."')") OR die(mysql_error()); } header('Location: index.php?action=events&save=yes'); ?>
Jetzt nur mal als Beispiel.
Trotzdem stehen in der DB immer noch diese Hyroglyphen.
Aber warum?
Achja habe ein Linuxsystem auf meinem Rechner und die DB hat MySQL-Zeichensatz: UTF-8 Unicode (utf8)
Könnt ihr mir helfen?
Danke
Bitte ohne Leerzeichen denken. Ohn die Leerzeichen würde es interprtiert werden.
Beitrag geändert: 23.10.2006 5:52:18 von newwarrior -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Ach Herrgott, wo soll man da anfangen?
Was sind Hieroglyphen? Oder besser: Wie sehen sie aus?
Meine Vermutung ist, dass der Server UTF-8-kodierte Texte schickt, aber keinen passenden HTTP-Header mitsendet. Der Browser nimmt dann meist an, das der Text in ISO-8859-1 oder Windows-1252 kodiert wurde. Das gibt natürlich bei deutschen Umlauten komische Zeichen ...
Warum benutzt du addslashes()?
Wenn du einen Text in einer Datenbank speicherst, dann speichere immer im Originalformat. Wenn du dann den Text wieder rausholst und zum Browser schickst, und dann im Browser Zeichensalat entsteht, dann solltest du darüber nachdenken, ob der Server dem Browser die richtig Zeichenkodierung mitschickt. Erst wenn das geklärt ist, kannst du überlegen, die Daten vor dem Zum-Browser-Schicken zu konvertieren.
Um rauszubekommen, was der Server dem Browser schickt, kannst du den Firefox mit einer der HTTP-Erweiterungen benutzen:
http://livehttpheaders.mozdev.org/
http://tamperdata.mozdev.org/
Die 'uml'-Kodierungen sind übrigens keine gute Idee. Mal abgesehen davon, dass du mehrere str_replace()-Befehle brauchst, wo ein preg_replace() mit Modifikator "/e" reichen würde, sind "character coded entities" seit XHTML sowieso out. Numerisch kodierte sind da besser:
$neu = preg_replace(
'/([\x80-\xff])/e',
'"&".ord($1).";"'
$alt
); -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage