Antwort
 
LinkBack Themen-Optionen Thema bewerten Ansicht
  #1  
Alt 18.03.07, 10:29
Benutzerbild von mensch
Forum Stammgast
 
Registriert seit: 11.01.07
Ort: NRW, Köln
Alter: 53
Beiträge: 109

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
__________________
Noch immer Typ3Dummie: Wenn ich weiss, dass ich nichts weiss, weiss ich mehr, als wenn ich nicht weiss, dass ich nichts weiss.

Geändert von mensch (20.03.07 um 09:17 Uhr).
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!Wong this Post!Spurl this Post!Reddit! Diesen Post bei linksilo.de bookmarken!
Mit Zitat antworten
  #2  
Alt 19.03.07, 10:06
Benutzerbild von mensch
Forum Stammgast
 
Registriert seit: 11.01.07
Ort: NRW, Köln
Alter: 53
Beiträge: 109

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.
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!Wong this Post!Spurl this Post!Reddit! Diesen Post bei linksilo.de bookmarken!
Mit Zitat antworten
  #3  
Alt 20.03.07, 09:17
Benutzerbild von mensch
Forum Stammgast
 
Registriert seit: 11.01.07
Ort: NRW, Köln
Alter: 53
Beiträge: 109

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ösung wäre alles auf UTFu8 umzustellen.
__________________
Noch immer Typ3Dummie: Wenn ich weiss, dass ich nichts weiss, weiss ich mehr, als wenn ich nicht weiss, dass ich nichts weiss.

Geändert von mensch (27.03.07 um 09:38 Uhr).
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!Wong this Post!Spurl this Post!Reddit! Diesen Post bei linksilo.de bookmarken!
Mit Zitat antworten
Antwort

Lesezeichen

Themen-Optionen
Ansicht Thema bewerten
Thema bewerten:

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Order By in eigene Extension farid1399 TYPO3 4.x Fragen und Probleme 2 30.06.08 16:06
Eigene Extension farid1399 TYPO3 4.x Fragen und Probleme 9 26.06.08 14:26
CSS für eigene Extension Sareen Extension modifizieren oder neu erstellen 5 19.04.08 00:54
View für eigene Extension flow TYPO3 4.x Fragen und Probleme 0 24.10.07 14:19
Eigene Extension / Preisstaffelung subchannel Extension modifizieren oder neu erstellen 0 26.08.07 17:50


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:00 Uhr.


Powered by vBulletin® Version 3.7.3 (Deutsch)
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
Search Engine Friendly URLs by vBSEO 3.1.0