Ergebnis 1 bis 6 von 6

Thema: Russische Zeichen werden falsch eingetragen

  1. #1
    TP-Supporter Avatar von buffy2511
    Registriert seit
    Feb 2005
    Ort
    Braunschweig
    Beiträge
    470

    Russische Zeichen werden falsch eingetragen

    Hallo zusammen,

    ich bin nun schon seit Ewigkeiten auf der Suche nach einer Lösung für mein Problem.

    Ich habe eine Excel-Artikelliste für einen Online-Shop erhalten.
    Die Artikel sind dort auf deutsch und auf russisch hinterlegt.

    Nach langem Probieren habe ich es nun auch geschaft, daraus eine CSV-Datei zu erstellen, in der die russichen Zeichen korrekt dargestellt werden. In die Datenbank importieren kann man es dennoch nicht:

    Entweder erscheinen ??? statt der Werte oder andere Zeichen, die mit russisch nichts zu tun haben.

    Also dachte ich, ich bin schlau:

    Ich habe also eine Routine geschrieben, in der ich die CSV-Datei Zeile für Zeile auslese und die Werte dann in die Datenbank eintrage:

    PHP-Code:
    foreach($zeile[$i] as $key[$i] => $value[$i])
        {
            
    $value[$i] = str_replace("\""""$value[$i]);

            
    $rows[$i] .= "'".htmlentities($value[$i])."', ";
            
    //$rows[$i] .= "'".$value[$i]."', ";
        
    }

        
    $rows[$i] = substr($rows[$i], 0strrpos($rows[$i], ","));

        
    $insert "insert into t_cat (id, parent_id, name_de, name_ru, group_id, group_main) values(".$rows[$i].", '', '')";
        
    $result mysql_query($insert); 
    Trotzdem ist das Ergebnis genau das gleiche. Zusätzlich werden die sogar die deutschen Einträge falsch dargestellt, zumindest alle Umlaute und Sonderzeichen.

    Wenn ich aber über das normale Backend Titel und Text hinzufüge, werden die Daten korrekt eingetragen, obwohl auch hier nur htmlentities verwendet wird.

    Woran kann das liegen? Und vor allem: Wie bekomme ich diese Artikel in einer Rutsche ich die Datenbank, damit ich nicht diese hunderte von Artikeln mehrsprachig per Hand eintragen muss?

    Vielen Dank schon mal für eure Hilfe.
    Grüße aus der Löwenstadt, Nadine

  2. #2
    TP-Veteran Avatar von Guin
    Registriert seit
    Nov 2006
    Ort
    Nordholz
    Beiträge
    1.684
    Moin,

    htmlentities verwendet standardmäßg Latin 1 als Zeichensatz, wo keine kyrillischen Zeichen enthalten sind.
    http://php.net/htmlentities

    Aber es sollte ohne diesen Umweg gehen. Dafür muss das Textfeld (/die Tabelle), in welches die kyrillischen Zeichen gespeichert werden, auf UTF-8 eingestellt sein. Beim Ausgeben des Textes muss man vermutlich den header der Seite auf den richtigen Zeichensatz einstellen.
    Code:
    header('Content-Type: text/html; charset=utf-8');
    Gruss Guin
    Mein Blog

  3. #3
    TP-Supporter Avatar von buffy2511
    Registriert seit
    Feb 2005
    Ort
    Braunschweig
    Beiträge
    470
    Vielen Dank für deine Antwort.

    PHP-Code:
    header('Content-Type: text/html; charset=utf-8'); 
    habe ich stehen.

    Und die htmlentities-Anmerkung stimmt zwar, aber warum klappt es dann im Backend?
    Darüber eingetragen werden die Zeichen wie folgt umgewandelt:
    "Гел" (ist ein bisschen abgewandelt, damit es nicht als Zeichen ausgegeben wird).
    So wird es dann im Frontend anschließen wieder korrekt dekodiert (Гел)

    Über mein tolles CSV-Auslesen-und-dann-in-die-Datenbank-eintrage-Skript sieht es in der DB dann so aus:
    ДопÐ
    Grüße aus der Löwenstadt, Nadine

  4. #4
    TP-Veteran Avatar von Guin
    Registriert seit
    Nov 2006
    Ort
    Nordholz
    Beiträge
    1.684
    Und die htmlentities-Anmerkung stimmt zwar, aber warum klappt es dann im Backend?
    Weil dort die Funktion mit dem charset-Parameter genutzt wird. Aber wirklich sagen kann ich das nicht, da ich das Backend nicht kenne

    PS: wenn ich mal mit verschiedenen Zeichensätzen arbeite, muss ich immer wieder von vorne rumprobieren, bis es klappt. Meistens ist aber die DB bei mir Schuld gewesen.
    Gruss Guin
    Mein Blog

  5. #5
    TP-Supporter Avatar von buffy2511
    Registriert seit
    Feb 2005
    Ort
    Braunschweig
    Beiträge
    470
    Zitat Zitat von Guin Beitrag anzeigen
    PS: wenn ich mal mit verschiedenen Zeichensätzen arbeite, muss ich immer wieder von vorne rumprobieren, bis es klappt. Meistens ist aber die DB bei mir Schuld gewesen.
    Soll heißen? Andere Zeichensätze in der DB ausprobieren?
    Und wenn ja - kriege ich dann die deutsche Sprache ebenfalls korrekt mit eingebunden?

    Und zum Backend: Da ist nichts Besonderes eingebaut. Ich habe da sogar "nur" charset iso-8859-1 eingestellt. Trotzdem klappt es mit russisch und sogar mit chinesisch.

    Kann das vielleicht an der CSV-Datei liegen? Oder daran, dass die Daten im Backend über ein Formular eingetragen werden?
    Grüße aus der Löwenstadt, Nadine

  6. #6
    TP-Veteran Avatar von Guin
    Registriert seit
    Nov 2006
    Ort
    Nordholz
    Beiträge
    1.684
    Es kommt nun ganz drauf an, was du machen möchtest.

    1. Die Zeichen mit htmlentities umcodieren und in die DB schreiben
    htmlentities($value,ENT_QUOTES,UTF-8)

    2. Die Rohdaten (mit mysql_real_escape_string) in die DB eintragen


    Variante 1 hat den Vorteil, dass es recht gut kompatibel ist und man beim programmieren auch nicht so viel achten muss. Der Nachteil kommt dann allerdings, wenn man versucht, die Datensätze zu sortieren (Kollation).
    Hase, Häschen, Haus, Hund
    H&aauml;schen, Hase, Haus, Hund

    Variante 2 hat den Vorteil, dass man mit die Originalzeichen in der Datenbank hat und sie beliebig anzeigen kann. Die Sortierung lässt sich einfach über die Kollation einstellen. Der Nachteil ist, dass man sich über die verschiedenen Verbindungen Gedanken machen muss. Die Zeichensätze dürfen in der ganzen Kette nicht wechseln.
    Relativ leicht hat man es, wenn man auf die Config von MySQL zugreifen kann. Dort lässt sich einstellen, welcher Zeichensatz als Standard genommen wird. Für gewöhnlich ist es Latin1. Bei verschiedenen Sprachen braucht man aber UTF8. Wenn Latin 1 Standard ist, muss man, wie vorhin schon erwähnt, darauf achten, dass die "Kette" nicht unterbrochen wird.
    Skript -> DB und DB -> Skript
    Da kann schon mal ein mysql_query("SET NAMES 'utf8'"); notwendig sein

    Mein Geschwafel ist nun keine direkte Lösung deines Problems, aber die Lust am Probieren und Nachdenken muss gegeben sein
    http://www.joelonsoftware.com/articles/Unicode.html
    Gruss Guin
    Mein Blog

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

Ähnliche Themen

  1. Russische Zeichen im IE ein Problem
    Von Flow09 im Forum HTML & CSS
    Antworten: 5
    Letzter Beitrag: 08.03.2007, 16:43
  2. email - Zeichen werden verschluckt
    Von alexf812 im Forum Traum-Dynamik
    Antworten: 5
    Letzter Beitrag: 26.01.2006, 23:01
  3. Daten werden falsch in die Datenbank eingetragen
    Von buffy2511 im Forum Traum-Dynamik
    Antworten: 4
    Letzter Beitrag: 06.11.2005, 17:07
  4. [mysql] felder werden nicht eingetragen
    Von Hausmaster im Forum Traum-Dynamik
    Antworten: 15
    Letzter Beitrag: 02.05.2005, 22:41
  5. russische Zeichen?
    Von T:-)M im Forum HTML & CSS
    Antworten: 3
    Letzter Beitrag: 12.11.2001, 10:15

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

     

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51