kostenloser Webspace werbefrei: lima-city


Probleme mit Sonderzeichen

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    n********r

    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
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. 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
    );
  4. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!