Türkische Zeichen

  • Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Werbung

Jetzt auf elektrisches Fahren umstellen, Umwelt schonen und 1.500km kostenlosen Strom von Tesla bekommen. https://ts.la/carsten15473.

Yusuf

Mitglied
30 Juli 2007
220
1
18
Hallo Mitglieder des HTML.de Forums,

ich habe wiedermal ein Problem. Ich entwickel gerade für eine Türkische Stadtseite, ein kleines CMS. Das CMS läuft alles über MySQL. Leider funktionieren die Türkischen Zeichen nicht bei der Ausgabe, die werden einfach mit einem ? ersetzt.

Der Charset sollte eig. stimmen. Hier aber mal der Code:
PHP:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
    <head>
                <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-9" />
        <meta http-equiv="Content-Language" content="tr, de" />
        <meta http-equiv="Content-Style-Type" content="text/css" />
        <meta http-equiv="Content-Script-Type" content="text/javascript" />
        
                <link rel="stylesheet" media="screen,projection" href="css/main_screen.css" type="text/css" />
        <script type="text/javascript" src="js/general.js"></script>
 
                <style type="text/css">
                  body { background-image: url('images/bg_dk.png'); background-repeat: repeat-x; background-color: #184c73; }
                 #light { position: absolute; top: 0px; left: 0px; background-image: url('images/bg_light.png'); background-repeat: no-repeat;
                 width: 571px; height: 567px; }
                </style>

                <title>Test</title>
    </head>
Im MySQL habe ich die Kollation als "latin5_turkish_ci" bezeichnet. Ich habe das ganze auch mal ohne MySQL versucht. Einfach eine test.html Seite angelegt mit dem Design, dort das Zeichen hinzugefügt. Diesmal erscheint nicht ein Fragezeichen, sondern das ganz normale s, wenn ich ş machen will.

Wisst ihr villeicht weiter?

EDIT: Das ş wird automatisch als s bei PSPAD gespeichert, sehe ich gerade.
 
S

struppi

Guest
Das sind zu wenig informationen - aber die Kollation hat nichts mit der Darstellung zu tun. Soweit ich mich damit auskenne, würde ich an deiner Stelle auch eher mit utf-8 arbeiten, dann haste alles auf einmal.
 

XraYSoLo

Senior HTML'ler
19 Juli 2005
6.036
26
48
hier gibts eine unicode-tabelle türkischer zeichen. das problem ist, dass textanwendungen standardmäßig nur ASCII kennen, also keine umlaute im deutschen und keine sonderzeichen anderer sprachen (deswegen wird deine eventuell vorhandene türkische tastatur auch nicht korrekt angezeigt werden). demnach muss maskiert werden. funktioniert jedoch nicht immer mit HTML direkt, manchmal gehts nur über unicode.

Edit: UTF-8 natürlich auch verwenden, dann gibts keine probleme beim anzeigen (struppi war aber schneller...)

Nils aka XraYSoLo
 
Zuletzt bearbeitet:

Yusuf

Mitglied
30 Juli 2007
220
1
18
Hallo,

wenn ich utf-8 verwende, funktionieren auch die deutschen Sonderzeichen nicht, wie z.B. ß, oder ö, ä und ü. Wenn ich ISO 8859-1 verwende, funktioniert alles, bis halt auf die Türkischen Zeichen, genau so wie bei ISO 8859-9, was ja eig. für Türkisch bestimmt ist, was ja auch meistens klappt.

Eine Türkische Tastatur verwende ich nicht, das mit dem Unicode ist ja auch okey und gut.

Aber beim Usersystem, wo sich Besucher registrieren können, wäre es blöd wenn man die Türkischen Zeichen sperrt, da in vielen Vor- und Nachnamen diese Zeichen zu finden sind.

Auf gut Deutsch gesagt, das wird nur zu Fehlern kommen. Sagen wir mal ich selber habe mich registriert, alles klappt wunderbar, bis die Fehlermeldung beim Login kommt "Benutzername falsch!". Da ich glaube, dass er die Türkische Zeichen beim hinzufügen in die Datenbank abändert oder beim Check ob die Daten übereinstimmen. Weiß es aber nicht.

Habe es noch nicht getestet.
 

XraYSoLo

Senior HTML'ler
19 Juli 2005
6.036
26
48
und wenn du alles zweisprachig machst?
türkisch verwendet UTF und deutsch ISO und jedesmal, wenn ein sprachenwechsel bevorsteht, tauschst du die encoding-zeile dynamisch aus?

Nils aka XraYSoLo
 
S

struppi

Guest
Natürlich funktionieren deutsche Umlaute mit utf, so wie du es beschreibst wirst du immer Probleme bekommen wenn du nur mit einem kleinem Zeichensatz arbeitest.
 

Yusuf

Mitglied
30 Juli 2007
220
1
18
und wenn du alles zweisprachig machst?
türkisch verwendet UTF und deutsch ISO und jedesmal, wenn ein sprachenwechsel bevorsteht, tauschst du die encoding-zeile dynamisch aus?

Nils aka XraYSoLo
Utf-8 klappt ja auch leider nicht bei türkisch :S. Sonst hätte ich mir irgendeinen Skript programmiert. Türkisch klappt bei keinem. Deutsch klappt nur bei utf-8 nicht.

@ struppi: Ich weiß, aber bei dem funktionierts halt nicht :S Ich habe ja auch nicht behauptet das utf-8 nicht bei allen webseiten funktioniert, sondern zurzeit nur auf meiner neuen.
 

XraYSoLo

Senior HTML'ler
19 Juli 2005
6.036
26
48
werden jetzt die zeichen nicht richtig angezeigt, oder spinnt die datenbank, weil sie irgendwas umwandeln will?
dann gäbe es nämlich - zugegeben aufwändige - methoden, scripte zu verfassen, die zwischen deutschen und türkischen zeichen separieren und sie dementsprechend maskieren.

Edit: ich habs jetzt versucht, unter deutschem ISO-satz die türkischen zeichen einzubringen, es funktioniert tadellos (hätte mich auch gewundert, da ich ab und an kroatische sonderzeichen für den ISO 8859-9 verwende) und das ganze ist auch valide...also da muss bei dir irgendwas fehschlagen.

Nils aka XraYSoLo
 
Zuletzt bearbeitet:

Yusuf

Mitglied
30 Juli 2007
220
1
18
Ich habe gerade mal in der Datenbank nachgeschaut, dort sind die Zeichen, genau wie es auch sein soll, eingetragen.

Entwieder stimmt was im Design nicht, oder in der Ausgabe des Inhalts von der Datenbank. Aber irgendwie verstehe ich das auch nicht :sad:
 

XraYSoLo

Senior HTML'ler
19 Juli 2005
6.036
26
48
zeig' doch mal her, wies 'rauskommt (und den verantwortlichen code)...

Nils aka XraYSoLo
 

Yusuf

Mitglied
30 Juli 2007
220
1
18
Ich habe die Seite jetzt für jedem Zugänglich gemacht. Dort kann man das Design und den Code sehen.

Die Ausgabe von der Datenbank läuft mit Platzhaltern, die ganz leicht mit str_replace ersetzt werden. Hiermal ein Code:
PHP:
   // Platzhalter auslesen
     $contentgroup = $db->get($prefix."content_group"); 
      $i = 1;
       foreach($contentgroup as $group){
        if($i == 1){ $replace = $temp['source']; }
        $replace = str_replace("{".$group['token']."}", $group['source'], $replace);
        $i++;
       }
      $replace = str_replace("{TITLE}", $opt['title'], $replace);
     eval("?>".$replace);
Source = Code/Seiteninhalt (PHP oder HTML)
Token = Platzhalter

Achtung: Beim zitieren dieser Antwort, achtet bitte drauf, dass ihr die URL abändert, da ich das nach dem Thema hier abändern werde.
 
Zuletzt bearbeitet:
S

struppi

Guest
Ich kann mich nur wiederholen - ohne utf-8 kommst du nicht weiter du machst es dir nur unnötig kompliziert.

z.b. wenn du sagst, es ist in der Datenbank so wie es sein soll, wäre es interessant gewesen in welcher Kodierung du dir die Datenbank betrachtest - wenn es mit phpmyAdmin ist, ist es i.d.R. in utf-8.
 

Yusuf

Mitglied
30 Juli 2007
220
1
18
Hallo,

schaut euch das mal jetzt an, arbeite jetzt mit utf-8. Wie man sieht, funktionieren jetzt auch nicht mehr die Umlaute ö, ä ,ü.

-> MySQL-Verbindung auf utf8 (SET NAMES utf8 ) stellen und HTTP-Header überprüfen
Habe ich gemacht, die Verbindung ist zurzeit unter utf8_bin.

Den HTTP-Header habe ich auch überprüft:
PHP:
Resultate des GSiteCrawler Server-Tests
Getestet am/um 10/9/2009 12:01:15 PM / von 88.77.42.91:

URL=http://editiert.de/dk/
Result code: 200 (OK / OK)


URL=http://editiert.de/dk/
Result code: 200 (OK / OK)
Date: Fri, 09 Oct 2009 14:19:31 GMT
Server: Apache/2.2.9 (Debian) PHP/5.2.6-1+lenny3 with Suhosin-Patch
X-Powered-By: PHP/5.2.6-1+lenny3
Set-Cookie: PHPSESSID=d6a00b2c00a2b14bd43802dbcc04e033; path=/
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Vary: Accept-Encoding
Content-Length: 2956
Content-Type: text/html
 
Zuletzt bearbeitet:
S

struppi

Guest
Die Daten in der Datenbank sind in ISO, wenn du alles umstellen würdest, bräuchtest du nur einen Zeichensatz für alles. Du musst aber natürlich auch die Daten in utf-8 umwandeln.
 
S

struppi

Guest
Naja, die Zeichen auf deiner Seite sind in ISO kodiert, deine Seite sagt aber sie solen in utf dargestellt werden, deshalb die Fragezeichen. Du musst nun die Zeichen in der Datenbank in utf umwandeln. Dann ist alles i.O.
 
S

struppi

Guest
Wir können dir nicht helfen.

Auf der Seite die du uns gezeigt hattest waren ISO kodierte Zeichen, d.h. du hast irgendwo, entweder in der Datenbank oder sie werden in deinem Skript umgewandelt, noch Zeichen mit dem falschen Zeichensatz.

Wie die Umwandlung der DB funktioniert hatte ich dir per PN gezeigt, wenn es bei dir nicht funktioniert hat, dann machst du etwas falsch. Es läßt sich aber von hier aus nicht sagen, was es ist. Solange du auf deiner UTF-8 kodierten Seite noch Fragezeichen statt Umlaute siehst, solange läuft irgendwo etwas falsch.

Mach doch einfach mal eine Testseite, die nur einen einfachen PHP Code enthält, der einfach nur einen Datensatz (mit Sonderzeichen) holt und diesen darstellt.
 

Yusuf

Mitglied
30 Juli 2007
220
1
18
Ich habe heute sehr viele Türkischen Internetseiten angeschaut. Einfach "Radio" z.B. bei Google eingegeben und durch die Suche rumgeklickt.

Bei allen Seiten die ich bis jetzt gesehen habe, hatten im Queltext:
PHP:
<meta http-equiv="Content-Type" content="text/html; charset=windows-1254"> // Viele
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-9"> // Einige
"utf-8" habe ich gar nicht gesehen.

Ich habe heute mein charset wieder mal auf "iso-8859-9" geändernt, hier klappen immer noch die z.B. Umlaute öäü.

Aber irgendetwas ist hier komisch, den wie ich gerade gesehen habe funktionieren die Buchstaben(die fett, unterstrichen und kursiv sind) Ş ş İ ı Ğ ğ Ç ç.

Ş ş İ ı Ğ ğ Ç ç = ? ? ? ? ? ? Ç ç

So sieht das ganze aus bei der Ausgabe. Ich find das irgendwie komisch warum die beiden "C" funktionieren und die anderen nicht.
 
Werbung: