Ergebnis 1 bis 3 von 3

Thema: UTF8 - eigene Extension > Sortierung > Substr

      
  1. #1
    Forum Stammgast Avatar von mensch
    Registriert seit
    11.01.2007
    Ort
    NRW, Köln
    Alter
    57
    Beiträge
    131

    UTF8 - eigene Extension > Sortierung > Substr

    Moin,
    knappse nunmehr seit drei Tagen an nachfolgendem Problem herum und bin jetzt komplett durcheinander: Habe eine Extension für mehrsprachige Kochzutaten (derzeit deutsch + türkisch) geschrieben, wo man beide Inhalte gleichzeitig eingibt.

    Der Text - sei es deutsch oder türkisch - wird richtig im Frontend mit allen Sonderzeichen ausgegeben. Als nun ein paar Inhalte eingepflegt wurden, merkte ich, dass die sortierte Liste nicht korrekt sortiert wird und die Buchstabenübersicht, die aus einem substr generiert wird, auch nicht die korrekten Zeichen anzeigt.

    Da ich annahm, dass dieses Problem mit dem Zeichensatz der Datenbank, des Schemas oder der Tabelle zusammenhing, habe ich eine Testextension generiert, die folgende Tabelle nutzt:
    Code:
    CREATE TABLE tx_test_test (
    	uid int(11) NOT NULL auto_increment,
    	pid int(11) DEFAULT '0' NOT NULL,
    	tstamp int(11) DEFAULT '0' NOT NULL,
    	crdate int(11) DEFAULT '0' NOT NULL,
    	cruser_id int(11) DEFAULT '0' NOT NULL,
    	hidden tinyint(4) DEFAULT '0' NOT NULL,
    	test varchar(20) DEFAULT '' NOT NULL,
    	
    	PRIMARY KEY (uid),
    	KEY parent (pid)
    )
    default character set = utf8;
    Über das Backend habe ich alle deutschen und türkischen Zeichen in Grossbuchstaben einzeln eingegeben. Die Funktion, die die Daten in der Extension abgreift sieht so aus:
    PHP-Code:
    function testfunktion($content,$conf)  {
      
    $rs=$GLOBALS['TYPO3_DB']->exec_SELECTquery('*','tx_test_test','pid=77','','test collate utf8_turkish_ci');
      
    $register='';
      
    $content.='<table width="50%">';
      while(
    $this->internal['currentRow'] = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($rs))  {
        
    $content.='<tr>';

        
    $register=substr(utf8_decode($this->internal['currentRow']['test']),0,1);

        
    //Spalte 1
        
    $content.='<td>'.$this->internal['currentRow']['test'].'</td>';
        
    //Spalte 2
        
    $content.='<td>'.$register.'</td>';
        
    //Spalte 3
        
    $content.='<td>'.utf8_encode($register).'</td>';
        
    $content.='</tr>';
      }
      
    $content.='</table><br />';
      return 
    $content;

    Das Ergebnis ist nicht schön
    A A A
    Ö � Ö
    Ä � Ä
    Ç � Ç
    İ ? ?
    Ü � Ü
    Ş ? ?
    Ğ ? ?
    B B B
    C C C
    D D D
    E E E
    F F F
    G G G
    H H H
    I I I
    J J J
    K K K
    L L L
    M M M
    N N N
    O O O
    P P P
    Q Q Q
    R R R
    S S S
    T T T
    U U U
    V V V
    W W W
    X X X
    Y Y Y
    Z Z Z

    Meine Einstellungen sind folgende:
    Typo3
    [BE][forceCharset] = utf-8

    SHOW VARIABLES LIKE '%collation%'
    collation_connection utf8_general_ci
    collation_database latin1_swedish_ci
    collation_server latin1_swedish_ci

    SHOW VARIABLES LIKE '%character%'
    character_set_client utf8
    character_set_connection utf8
    character_set_database latin1
    character_set_results utf8
    character_set_server latin1
    character_set_system utf8

    Was nur habe ich falsch gemacht in meiner dummen Unwissenheit ?
    Gruss Mensch
    Geändert von mensch (20.03.2007 um 08:17 Uhr)
    Noch immer Typ3Dummie: Wenn ich weiss, dass ich nichts weiss, weiss ich mehr, als wenn ich nicht weiss, dass ich nichts weiss.

  2. #2
    Forum Stammgast Avatar von mensch
    Registriert seit
    11.01.2007
    Ort
    NRW, Köln
    Alter
    57
    Beiträge
    131
    So, wenn man Dummie ist, passiert derartiges mit Asci und UTF Unterschieden. Die Substr-Funktion kann man schlecht auf 2 Byte lange türkische Zeichen anwenden. Lösung:
    PHP-Code:
      //------ testfunktion ------//
      
    function testfunktion($content,$conf)  {
        
    $rs=$GLOBALS['TYPO3_DB']->exec_SELECTquery('*','tx_test_test','pid=77','','test collate utf8_general_ci');
        
    $register='';
        
    $content.='<table width="50%">';
        while(
    $this->internal['currentRow'] = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($rs))  {
          
    $content.='<tr>';
          
    $content.='<td>Original: '.$this->internal['currentRow']['test'].'</td>';

          
    $laenge=$this->Utf8Zeichenlaenge($this->internal['currentRow']['test'],1);
          
    $register=substr($this->internal['currentRow']['test'],0,$laenge);

          
    $content.='<td>Länge: '.$laenge.'</td>';
          
    $content.='<td>Nach Substr: '.$register.'</td>';
          
    $content.='</tr>';
        }
        
    $content.='</table><br />';
        return 
    $content;
      }
      
      
    //--- Position ---
      
    function Utf8Zeichenlaenge ($string,$pos) {
        
    //Quelle: http://forum.de.selfhtml.org/archiv/2005/3/t104162/
        
    if(ord($string{$pos}) < 0x80) {
          
    $offset 1;
        } else if(
    ord($string{$pos}) < 0xe0) {
          
    $offset 2;
        } else {
          
    $offset 0;
        }
        return 
    $offset;
      } 
    Mein Problem mit der Sortierung bleibt aber noch bestehen. Zwischenzeitlich sieht die Testtabelle folgendermassen aus:
    Code:
    CREATE TABLE tx_test_test (
    	uid int(11) NOT NULL auto_increment,
    	pid int(11) DEFAULT '0' NOT NULL,
    	tstamp int(11) DEFAULT '0' NOT NULL,
    	crdate int(11) DEFAULT '0' NOT NULL,
    	cruser_id int(11) DEFAULT '0' NOT NULL,
    	hidden tinyint(4) DEFAULT '0' NOT NULL,
    	test varchar(20) COLLATE utf8_general_ci DEFAULT '' NOT NULL ,
    	PRIMARY KEY (uid),
    	KEY parent (pid)
    )
    default character set = utf8 COLLATE=utf8_general_ci;
    Das Problem muss an meiner eigenen Dummheit liegen, nur ich komme nicht hinter meine Dummheit. Kann mir bitte jemand helfen? Ich krieg ja nicht mal die deutsche Sortierung hin!

    Gruss Mensch
    Noch immer Typ3Dummie: Wenn ich weiss, dass ich nichts weiss, weiss ich mehr, als wenn ich nicht weiss, dass ich nichts weiss.

  3. #3
    Forum Stammgast Avatar von mensch
    Registriert seit
    11.01.2007
    Ort
    NRW, Köln
    Alter
    57
    Beiträge
    131
    Meine Vermutungen gehen in Richtung Server-Zeichensatz. Mal schauen.

    Ja dem ist so, der Serverzeichensatz ist Latin1 und Typo3 ist egal, ob eine Tabelle in diesem Schema auf Utf8 gestellt ist. Die L&#246;sung w&#228;re alles auf UTFu8 umzustellen.
    Geändert von mensch (27.03.2007 um 08:38 Uhr)
    Noch immer Typ3Dummie: Wenn ich weiss, dass ich nichts weiss, weiss ich mehr, als wenn ich nicht weiss, dass ich nichts weiss.

 

 

Aktive Benutzer

Aktive Benutzer

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

Facebook Kommentare

Ähnliche Themen

  1. Order By in eigene Extension
    Von farid1399 im Forum TYPO3 4.x Fragen und Probleme
    Antworten: 2
    Letzter Beitrag: 30.06.2008, 15:06
  2. Eigene Extension
    Von farid1399 im Forum TYPO3 4.x Fragen und Probleme
    Antworten: 9
    Letzter Beitrag: 26.06.2008, 13:26
  3. CSS für eigene Extension
    Von Sareen im Forum Extension modifizieren oder neu erstellen
    Antworten: 5
    Letzter Beitrag: 18.04.2008, 23:54
  4. View für eigene Extension
    Von flow im Forum TYPO3 4.x Fragen und Probleme
    Antworten: 0
    Letzter Beitrag: 24.10.2007, 13:19
  5. Eigene Extension / Preisstaffelung
    Von subchannel im Forum Extension modifizieren oder neu erstellen
    Antworten: 0
    Letzter Beitrag: 26.08.2007, 16:50

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 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237