umlaute und sonderzeichen

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • umlaute und sonderzeichen

    hi leute,

    ich hab da ein recht nerviges problem in bezug auf sonderzeichen, ferner umlauten beim import einer csv dabei in die mysql datenbank.

    Letztlich werden die "gängigen" Sonderzeichen zwar importiert und passend gespeichert, aber speziellere Dinge zu "?" konvertiert.

    Sie wird auch "Śmiertelny" halt "?miertelny"

    Da ich jetzt noch nicht weiß, welche infos fürs debugging nötig sind, hier schon mal die groben details:

    doctype ist utf8, mysql collation ist utf8_general_ci.
    Des weiteren setze ich folgendes im Anfang des Scripts:
    PHP-Code:
    header('Content-Type: text/html; charset=UTF-8');
    mysql_query('SET NAMES `UTF-8`') ; 
    die upload routine ist simple gehalten und speichert die csv als temp.csv aufm ftp:
    PHP-Code:
    if($error=="1") {
                    @
    unlink($file);
                } else {
                    if (
    file_exists($folder.$name)) { unlink($folder.$name) ; }
                    if (!@
    move_uploaded_file($file,$folder.$name)) {
                        
    $global['form']['error'] = 'Die Datei konnte nicht hochgeladen werden. Bitte wenden Sie sich an den Support<br /><br />' ;
                    } else {
                        
    chmod ($folder.$name0755);
                        
    $global['form']['error'] .= '<strong>Datei hochgeladen.</strong><br />' ;
                        
    header('Location: '.$global['path'].'?admin=import&b='.$ext) ;
                    }
                } 
    hier ist die erste grobe routine zum verarbeiten der csv daten:
    PHP-Code:
    $tpl file_get_contents('./tpl/import.html') ;
                
                
    $csv    file_get_contents('./../temp/temp.'.$_GET['b']) ;
        
                
    #$csv    = utf8_decode($csv) ;
                
    if (!preg_match("#\n#s"$csv)) { 
                    
    $csv    preg_replace("#\r#s""\n"$csv) ; 
                } else {
                    
    $csv    preg_replace("#\r#s"""$csv) ; 
                }
                
                
    $csv    preg_replace("#\"#s"""$csv) ; 
                
    $csv    explode("\n"$csv) ; 
    und hier noch fix der import der csv daten in die datenbank:
    PHP-Code:
    for ($i 1$i <= $csv_i$i++) {

                        
    $sql 'INSERT INTO `datasets` (
                                                        `id`, 
                                                        `author`, 
                                                        `year`,
                                                        `title`,
                                                        `src`,
                                                        `link`,
                                                        `reference_src`,
                                                        `languages`,
                                                        `country`,
                                                        `doctype`,
                                                        `timestamp`
                                                    ) VALUES (
                                                        "'
    .mysql_real_escape_string($data[$i][$data_keys['id']]).'", 
                                                        "'
    .mysql_real_escape_string($data[$i][$data_keys['author']]).'",  
                                                        "'
    .mysql_real_escape_string($data[$i][$data_keys['year']]).'", 
                                                        "'
    .mysql_real_escape_string($data[$i][$data_keys['title']]).'", 
                                                        "'
    .mysql_real_escape_string($data[$i][$data_keys['src']]).'", 
                                                        "'
    .mysql_real_escape_string($data[$i][$data_keys['link']]).'", 
                                                        "'
    .mysql_real_escape_string($data[$i][$data_keys['reference_src']]).'", 
                                                        "'
    .mysql_real_escape_string($data[$i][$data_keys['languages']]).'", 
                                                        "'
    .mysql_real_escape_string($data[$i][$data_keys['country']]).'", 
                                                        "'
    .mysql_real_escape_string($data[$i][$data_keys['doctype']]).'",
                                                        NOW( )
                                                    );' 
    ;
                    
                        
    mysql_query($sql) ;
                        
    $csv_k++ ;
            
                    } 
    im großen und ganz läuft das ... eben mit den ganz fiesen sonderzeichen gehts nicht voran!

    hat jmd von euch mal nen tip, woher der wind weht?

    grüße,
    jon
    Design & Coding with a breeze of madness at xjonx

  • #2
    Hallo,

    ich vermute, dass die CSV in ISO-8859-2 oder CP1250 vorliegt. Kannst du das mal überprüfen? Wenn das der Fall ist, helfen dir die mbstring-Funktionen.

    Gruß,

    Amica
    [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
    Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
    Super, danke!
    [/COLOR]

    Kommentar


    • #3
      ja und nein ... ich hab es vom document encoding her, mit utf8 als auch mit ISO-8859-1 probiert.

      noch ne idee?
      Design & Coding with a breeze of madness at xjonx

      Kommentar


      • #4
        Zitat von xJonx Beitrag anzeigen
        ja und nein ... ich hab es vom document encoding her, mit utf8 als auch mit ISO-8859-[COLOR="Red"]1[/COLOR] probiert.
        Ich rede aber von ISO-8859-[COLOR="Red"]2[/COLOR]
        [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
        Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
        Super, danke!
        [/COLOR]

        Kommentar


        • #5
          ok, ich bin jetzt davon ausgegangen das du meinst das
          ich checken soll ob es in dem encoding ist.

          soll ich demnach also mal dieses encoding ausprobieren?
          Design & Coding with a breeze of madness at xjonx

          Kommentar


          • #6
            Also ich meine nach wie vor, dass du rauskriegen sollst, in welchem Zeichensatz die Datei vorliegt. Dass es nicht ISO 8859-1 sein kann, erkennt man schon an dem Buchstaben selbst, weil es den in Latin-1 nicht gibt. Latin-2 (also ISO 8859-2) ist auch eher unwahrscheinlich, wenn die Datei von einem Windows-Rechner kommt. Also ist es (wenn es kein UTF-8 ist) höchstwahrscheinlich CP1250. Du solltest jetzt also prüfen, ob die Datei wirklich als CP1250 vorliegt.

            Gruß,

            Amica

            Edit: Du kannst die Datei auch mit nem Hex-Editor öffnen und mir sagen, welchen Bytewert das Ś hat.
            Zuletzt geändert von AmicaNoctis; 22.09.2009, 11:32.
            [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
            Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
            Super, danke!
            [/COLOR]

            Kommentar

            Lädt...
            X