Suchmaschinenoptimierung
   
 

 

Warum registrieren?

Nur als registriertes Mitglied vom ABAKUS Forum hast Du vollen Zugriff auf alle Funktionen unserer Website. So kannst Du Deine eigenen Fragen auf einen Blick anzeigen lassen und hast die volle Übersicht über neue interessante Themen im Forum für Suchmaschinenoptimierung. Jetzt kostenlos registrieren.

 
Schnellsuche!:  

Zeichensatz der Datenbankverbindung anzeigen lassen?

Neues Thema eröffnen   Neue Antwort erstellen    ABAKUS Foren-Übersicht -> Webprogrammierung, Templatedesign & Microformats Druckversion
 gibt es auch allow für die robots.txt Anweisung? :: fotos in wordpress einbinden  
Autor Nachricht
Andreas I.
PostRank 9
PostRank 9


Anmeldungsdatum: 18.03.2006
Beiträge: 1317
Wohnort: Hamburg

BeitragVerfasst am: 10.03.2010, 00:56    Titel: Zeichensatz der Datenbankverbindung anzeigen lassen? Antworten mit Zitat Nutzer zur Ignorier-Liste hinzufügen

Hallo, wieder mal ein utf-8 Problem...

Wie kann ich mir unter PHP anzeigen lassen, welchen Zeichensatz die gerade aktuelle Verbindung nutzt?

Hintergrund:
Sonderzeichen werden falsch dargestellt.
PHP-Datei ist in utf-8.
Tabelle in der Datenbank ist in utf-8.
PHPMyadmin wird in utf-8 angezeigt und die Daten sind korrekt
Gerenderte Datei im Browser wird in utf-8 angezeigt und die Daten sind kaputt.
Ich schreibe zu Anfang:
Code:
$link = mysql_connect($sqlserver,$sqluser,$sqlpwd);
mysql_query("SET NAMES 'utf8'",$link);


Und nun will ich wissen:
Hat MySQL es gerafft, dass ich utf-8 Daten will? (scheinbar nicht...)
In welcher Sprache unterhalten sich PHP & MySQL eigentlich gerade? Kisuaheli? Altgriechisch?

Also ich will schreiben:
echo "<!-- [Hier die Befehle zur Anzeige des Zeichensatzes der MySQL-Verbindung] -->";[/code]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
800XE
PostRank 10
PostRank 10


Anmeldungsdatum: 02.12.2004
Beiträge: 3376
Wohnort: 67346 WEBSpeyer.de

BeitragVerfasst am: 10.03.2010, 01:45    Titel: Re: Zeichensatz der Datenbankverbindung anzeigen lassen? Antworten mit Zitat Nutzer zur Ignorier-Liste hinzufügen

Andreas I. hat Folgendes geschrieben:
PHP-Datei ist in utf-8.

ist im HTML(Template) auch irgendwo üöäß
ich denke mal "nein" weil ich denke das die dann auch "kaputt" wären
ich denke deine Datei wird vom Apach in ISO-xxxx-1 ausgeliefert

und ich denke, das Apach "seine" Zeichenkodierung ans PHP gibt und PHP das dann an SQL
meine Seiten sind laut http-Header(nicht html-Meta) in iso-xxx-1 und irgendwo hab ich utf-8 SQLs und es funktioniert .... ohne das ich extra irgendwelche Zeichensatzbefehle an SQL gebe

welchen Charset hast du im http-Header (der hat höhere Priorität als der im html-Meta)
www.chegu.de/AWT/HTTP-Header.html
ähm, an den Host wo ich eben gedacht habe, da hab ich garkein Charset im http-Header ... war aber glaub mal
_________________
mein Name ist Zmuda :::::::::: Andy 800XE Zmuda ::::::::: Brotscheibenhalbierer
sein Name ist Westerwelle :::::::::: Guido Westerwelle ::::::::: Bevölkerungshalbierer
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Andreas I.
PostRank 9
PostRank 9


Anmeldungsdatum: 18.03.2006
Beiträge: 1317
Wohnort: Hamburg

BeitragVerfasst am: 10.03.2010, 11:42    Titel: Zeichensatz der Datenbankverbindung anzeigen lassen? Antworten mit Zitat Nutzer zur Ignorier-Liste hinzufügen

Laut live http-headers wird beides akzeptiert:
...
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.9.2) Gecko/20100115 Firefox/3.6
Accept: text/html, */*
Accept-Language: de-de,de;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 115
...

Also ISO-8859-1 und utf-8 gleichermaßen. Aber das sagt ja nichts aus, was nun tatsächlich versendet wird.

Umlaute tauchen in der fertig gerenderten Seite durchaus auch in richtig dargestellter Art und Weise auf.
Es ist aber so, dass das PHP-Script mehrere Dateien includiert und am Ende läuft auf der fertigen Seite auch noch AJAX. (Gerade der AJAX-Teil funktioniert utf-8 mäßig nicht ganz richtig und arbeitet aber mit der Datenbank zusammen.)
Andere Teile der Scripts arbeiten auch mit der DB zusammen und geben die Daten korrekt formatiert aus.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Mork vom Ork
PostRank 10
PostRank 10


Anmeldungsdatum: 08.07.2008
Beiträge: 2574
Wohnort: Aufm Friedhof.

BeitragVerfasst am: 10.03.2010, 12:25    Titel: Zeichensatz der Datenbankverbindung anzeigen lassen? Antworten mit Zitat Nutzer zur Ignorier-Liste hinzufügen

Andreas I. hat Folgendes geschrieben:
PHP-Datei ist in utf-8.

Prinzipiell egal, wichtig ist, was das Skript ausgibt. Enthält das Skript reine Datenbereiche (außerhalb von <?php und ?>), dann sollten diese zwar in der vom Skript bzw. Server gemeldeten Kodierung vorliegen oder kompatibel sein (us-ascii und die jeweils ersten 128 Zeichen der iso-8859-Familienmitglieder sind kompatibel mit utf-8), beim eigentlichen PHP-Code kommt es aber immer darauf an, wie die auszugebenden Texte verarbeitet werden.

Zitat:
Tabelle in der Datenbank ist in utf-8.

Vollkommen egal. Die Zeichensätze der Tabelle bestimmen nur die Sortierung und die speicherbaren Zeichen. In welcher Kodierung die Datenbank die Zeichen liefert, ist alleine von der Verbindung abhängig, von nichts anderem, insbesondere nicht von den Tabellen- und Spaltenzeichensätzen, das kannst du im Grunde beliebig kombinieren (auch wenn es natürlich wenig sinnvoll ist, über eine Verbindung, die nur japanische Zeichen transportieren kann, Inhalte einer Tabelle senden zu wollen, die einen kyrillischen Zeichensatz nutzt und dementsprechend nur kyrillische Zeichen enthält).

Die Verbindungskodierung setzt du mit mysql_set_charset() und erfährst sie mit mysql_client_encoding() (mit einem kurzen Blick in die Funktionsübersicht hättest du das auch selbst herausgefunden).

Zitat:
PHPMyadmin wird in utf-8 angezeigt und die Daten sind korrekt

Das zeigt zwar, dass die Zeichen in der Datenbank richtig abgelegt sind (und nicht kaputtkodiert, wie es bei alten MySQL-Versionen vorkam bzw. selten auch nötig war), hat aber ansonsten nicht viel zu sagen.

Zitat:
Umlaute tauchen in der fertig gerenderten Seite durchaus auch in richtig dargestellter Art und Weise auf.
Es ist aber so, dass das PHP-Script mehrere Dateien includiert und am Ende läuft auf der fertigen Seite auch noch AJAX. (Gerade der AJAX-Teil funktioniert utf-8 mäßig nicht ganz richtig und arbeitet aber mit der Datenbank zusammen.)
Andere Teile der Scripts arbeiten auch mit der DB zusammen und geben die Daten korrekt formatiert aus.

Kläre erstmal, welche Teile richtig dargestellt werden (bzw. wo sie herkommen) und welche nicht. Dann kannst dir überlegen, wo da der Unterschied besteht. Es bringt nichts, wenn du im Seitenskript rumprobierst und der Fehler befindet sich in einem ganz anderen Skript, das sich um die Ajax-Sachen kümmert.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
nerd
PostRank 10
PostRank 10


Anmeldungsdatum: 15.02.2005
Beiträge: 1339
Wohnort: AKL

BeitragVerfasst am: 11.03.2010, 02:08    Titel: Zeichensatz der Datenbankverbindung anzeigen lassen? Antworten mit Zitat Nutzer zur Ignorier-Liste hinzufügen

loest vielleicht ein

Code:

header("Content-type: text/html; charset=utf-8");


dein problem (ganz am anfang deiner seite)?
_________________
blackhat linkkauf und so...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Andreas I.
PostRank 9
PostRank 9


Anmeldungsdatum: 18.03.2006
Beiträge: 1317
Wohnort: Hamburg

BeitragVerfasst am: 11.03.2010, 12:53    Titel: Zeichensatz der Datenbankverbindung anzeigen lassen? Antworten mit Zitat Nutzer zur Ignorier-Liste hinzufügen

Habe jetzt alles auprobiert. Jede Einstellung auf utf-8 gesetzt, die nicht bei 3 auf den Bäumen ist und es funktioniert immer noch nicht.

Ich lasse in den diversen script-Teilen, die includiert werden, jetzt immer als HTML-Kommentar ausgeben:
Code:
echo"<!-- charset in ajax_proxy.php: ".mysql_client_encoding($link)." -->";

und entsprechend in den anderen Scripten. Tatsächlich wurde an einigen Stellen noch latin-1 verwendet. Das habe ich so korrigiert, dass jetzt überall in den HTML-Kommentar ausgegeben wird: "<!-- charset in config.inc.php: utf8 -->"

Einziger Verdächtiger ist jetzt noch jquery. Im generierten Quelltext ist zu sehen, dass irgendwie in jquery der Wurm drin ist. JavaScript-Kommentare werden falsch ausgegeben usw.

Na, mal sehen....
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
nerd
PostRank 10
PostRank 10


Anmeldungsdatum: 15.02.2005
Beiträge: 1339
Wohnort: AKL

BeitragVerfasst am: 11.03.2010, 22:48    Titel: Zeichensatz der Datenbankverbindung anzeigen lassen? Antworten mit Zitat Nutzer zur Ignorier-Liste hinzufügen

hast du deine einstellungen in der db auch genau ueberprueft? charset kann man in mysql per datenbank, per tabelle und per spalte festlegen; allerdings wird davon nix vererbt - soll heissen wenn ich bei tabellen optionen utf8/utf8_general_ci angebe kann es sein das die spalten trotzdem noch als latin behandelt werden.
versuch mal
Code:
show full columns from TABELLE

hast du die php header angabe versucht? damit sagst du dem browser explizit das der inhalt als utf-8 behandelt werden soll, das ist notwendig sobald du deine verbindung mit "SET NAMES UTF8" setzt...
_________________
blackhat linkkauf und so...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Mork vom Ork
PostRank 10
PostRank 10


Anmeldungsdatum: 08.07.2008
Beiträge: 2574
Wohnort: Aufm Friedhof.

BeitragVerfasst am: 11.03.2010, 23:20    Titel: Zeichensatz der Datenbankverbindung anzeigen lassen? Antworten mit Zitat Nutzer zur Ignorier-Liste hinzufügen

nerd hat Folgendes geschrieben:
hast du deine einstellungen in der db auch genau ueberprueft? charset kann man in mysql per datenbank, per tabelle und per spalte festlegen

Neinneinneinneinneinundneien. Die Zeichensätze in Datenbank, Tabelle und Spalte haben nichts, nichts, nichts mit dem zu tun, was bei einer Abfrage geliefert wird.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
nerd
PostRank 10
PostRank 10


Anmeldungsdatum: 15.02.2005
Beiträge: 1339
Wohnort: AKL

BeitragVerfasst am: 12.03.2010, 00:59    Titel: Zeichensatz der Datenbankverbindung anzeigen lassen? Antworten mit Zitat Nutzer zur Ignorier-Liste hinzufügen

hm was ist dann der unterschied oder zweck dieser einstellung? oder ist das nur fuer die sortierung wichtig...? ich hatte jedenfalls immer mal probleme mit "kaputten" zeichen beobachtet wenn leute osteuropaeische zeichen in eine db geschieben haben die mit default charset (latin_1/...) lief...

oder anders gefragt: woher weiss mysql wie es die zeichen interpretieren soll wenn es irgendwas exotisches (umlaute oder asiatische schriftzeichen) in einer abfrage bekommt?
_________________
blackhat linkkauf und so...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Mork vom Ork
PostRank 10
PostRank 10


Anmeldungsdatum: 08.07.2008
Beiträge: 2574
Wohnort: Aufm Friedhof.

BeitragVerfasst am: 12.03.2010, 10:54    Titel: Zeichensatz der Datenbankverbindung anzeigen lassen? Antworten mit Zitat Nutzer zur Ignorier-Liste hinzufügen

nerd hat Folgendes geschrieben:
ist das nur fuer die sortierung wichtig...?

Die Kodierungseinstellung bei Datenbank, Tabelle und Spalte bestimmt die Sortierung und den Umfang der speicherbaren Zeichen. Kann die Tabelle bzw. die Kodierung nur kyrillische Zeichen, kannst du keine arabischen reinschreiben. Oder …

Zitat:
ich hatte jedenfalls immer mal probleme mit "kaputten" zeichen beobachtet wenn leute osteuropaeische zeichen in eine db geschieben haben die mit default charset (latin_1/...) lief...

Latin1 hat keine osteuropäischen Zeichen. In einer Tabelle, die nur westeuropäische Zeichen kennt, osteuropäische Zeichen speichern zu wollen, ist, als wenn du versuchst, einen eckigen Bauklotz ins runde Loch zu kloppen. Daher die (tatsächlich oder vermeintlich) kaputten Zeichen – garbage in, garbage out.

Zwar lässt sich zB das Byte 205 eines osteuropäischen Zeichens in einer westeuropäischen Tabelle speichern, Byte ist Byte, nur behandelt die Tabelle dieses Byte 205 dann halt als westeuropäisches Zeichen. Das geht solange gut, wie die aus der Tabelle gelesenen Bytes von einer Anwendung verarbeitet werden, die auf die falsche Kodierungsangabe gefasst ist.
Wechselt man zu einer anderen Anwendung, zum Beispiel um mit phpmyadmin irgendwas manuell nachzugucken, zeigt diese Anwendung natürlich kaputte Zeichen, denn laut Tabelleinformation sollen die Bytes ja als westliche Zeichen interpretiert werden.

Zitat:
woher weiss mysql wie es die zeichen interpretieren soll wenn es irgendwas exotisches (umlaute oder asiatische schriftzeichen) in einer abfrage bekommt?

Weil für die Verbindung eine eigene Kodierung gilt, nur deswegen benutzt du doch SET NAMES (die zu bevorzugenden PHP-Funktionen hatte ich oben schon genannt). Mit dieser Anweisung erzählst du MySQL, in welcher Kodierung du deine Bytes schickst bzw. empfangen möchtest.
Die Umsetzung Verbindung/Tabelle übernimmt MySQL für dich. Du kannst dich ohne weiteres mit MySQL in Latin1 unterhalten, während du in einer Unicode-Tabelle arbeitest (oder auch umgekehrt). Einzige Einschränkung ist dann natürlich, dass über die Verbindung nicht alle Zeichen transportiert werden können, die in der Datenbank stehen, sondern nur diejenigen, die die Verbindung zulässt. Diese kommen dann aber auch korrekt an, ein ö bleibt ein ö, egal aus welcher Tabelle es kommt – man muss es nur richtig reinschreiben.

Siehe auch Verbindungszeichensatz in der MySQL-Anleitung.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Bauchladen
PostRank 6
PostRank 6


Anmeldungsdatum: 24.04.2005
Beiträge: 386
Wohnort: Hamburg

BeitragVerfasst am: 12.03.2010, 11:05    Titel: Zeichensatz der Datenbankverbindung anzeigen lassen? Antworten mit Zitat Nutzer zur Ignorier-Liste hinzufügen

Code:


utf8_decode( .. )
utf8_encode(. . )


_________________
Suche Linktausch für Autoreparatur
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Neues Thema eröffnen   Neue Antwort erstellen    ABAKUS Foren-Übersicht -> Webprogrammierung, Templatedesign & Microformats
Seite 1 von 1


 






Ähnliche Beiträge
Thema Autor Forum Antworten Verfasst am
Keine neuen Beiträge MS hat den shutdown patentieren lassen catcat Offtopic, Spaßecke und alle sonstigen Themen 1 02.09.2010, 15:38 Letzten Beitrag anzeigen
Keine neuen Beiträge Mehre URL`s je Anzeigengruppe möglich... valery112 Google Adwords & Yahoo! Search Marketing 1 29.08.2010, 17:28 Letzten Beitrag anzeigen
Keine neuen Beiträge Wordpress - Inhalt nur auf der Starts... Julee87 Content Management Systeme (CMS) & Blog-, Wiki und Shopsysteme 3 23.08.2010, 11:21 Letzten Beitrag anzeigen
Keine neuen Beiträge "Aufgerufene AdSense-Anzeigen&qu... fuchs Google Adsense 1 17.08.2010, 13:33 Letzten Beitrag anzeigen
Keine neuen Beiträge Möglichkeit texte professionell erste... d3x84 Andere Marketingmaßnahmen und Webpromotion 8 02.08.2010, 12:50 Letzten Beitrag anzeigen
Keine neuen Beiträge Foren umsortieren: Machen oder lieber... capsaicine Content Management Systeme (CMS) & Blog-, Wiki und Shopsysteme 3 26.07.2010, 10:45 Letzten Beitrag anzeigen
Keine neuen Beiträge Farbliche Abhebung der Anzeigen bei G... bugscout Google Forum 4 21.07.2010, 01:34 Letzten Beitrag anzeigen

Suchmaschinenoptimierung Angebote
Suchmaschinenoptimierung | Latent Semantische Optimierung (LSO) | SEO Blog | SEO Online Tools | Suchmaschinenmarketing Angebot | Online Marketing

Impressum

Powered by phpBB © 2001, 2005 phpBB Group


Sie lesen gerade: Zeichensatz der Datenbankverbindung anzeigen lassen?