![]() |
| | Themen-Optionen |
| | Nach oben #1 |
| Erfahrener Benutzer Registriert seit: 31.12.2006 Ort: Zürich
Beiträge: 298
|
Ich lese ein Verzeichnis mit readdir aus. Dort drin hat es einige Dateien mit Umlauten (Hä.txt, Hü.txt Code: Ha\u0308.txt Code: Hu\u0308.txt Code: Hä Code: Hü
__________________ . <-- This is Punkt. Copy Punkt into your signature to help him on his way to world domination. |
| | |
| | Nach oben #2 | ||
| Erfahrener Benutzer Registriert seit: 31.12.2006 Ort: Zürich
Beiträge: 298
|
Ich kriege es nicht hin... Hat keiner eine Idee, wieso PHP aus "ü" ein u\u0308 macht? Ich hab mal noch folgendes versucht: PHP-Code: Zitat:
Zitat:
__________________ . <-- This is Punkt. Copy Punkt into your signature to help him on his way to world domination. | ||
| | |
| | Nach oben #3 | |
| Benjamin Klaile Registriert seit: 02.12.2004 Ort: Remagen
Beiträge: 4.480
| http://python.net/pipermail/python-d...q1/004534.html Zitat:
| |
| | |
| | Nach oben #4 |
| Erfahrener Benutzer Registriert seit: 31.12.2006 Ort: Zürich
Beiträge: 298
|
Ich habe gerade gemerkt, dass das Problem nur auf Windows- und Mac-Systemen besteht. Auf meinem Debian-Server geht alles ohne Probleme. Es bleibt mysteriös...
__________________ . <-- This is Punkt. Copy Punkt into your signature to help him on his way to world domination. |
| | |
| | Nach oben #5 |
| Erfahrener Benutzer Registriert seit: 18.08.2005
Beiträge: 108
|
readdir() übernimmt wohl die Kodierung der Pfade wie sie vom Betriebssystem geliefert wird. Und nur das Debian-System scheint utf-8 zu liefern. Bei den anderen Systemen könnte man die \u-Kodierungen aber auch nach utf-8 umwandeln... |
| | |
| | Nach oben #6 | |
| Erfahrener Benutzer Registriert seit: 31.12.2006 Ort: Zürich
Beiträge: 298
| Zitat:
__________________ . <-- This is Punkt. Copy Punkt into your signature to help him on his way to world domination. | |
| | |
| | Nach oben #7 |
| Martin Eisengardt Registriert seit: 30.03.2006 Ort: Pfinztal
Beiträge: 355
|
Das PHP macht das nicht von sich aus. Das PHP befindet das Zeichen für "sinnvoll". PHP-Code:
__________________ Open Sourcing the Online Gaming Universe PHP/SQL/Java/C++/Assembler. Seit Jahren Mitglied und Entwickler in einem der wohl größten Java-Projekte der Welt: http://weblogs.java.net/blog/hansmul...e_desktop.html |
| | |
| | Nach oben #8 | |
| Erfahrener Benutzer Registriert seit: 18.08.2005
Beiträge: 108
| Zitat: Hab ma grad gesucht und im manual keine passende Funktion gefunden. In PEAR/PECL könnte man noch gucken. Oder per Regex die \uabcd in &#abcd; umwandeln und mit http://de2.php.net/manual/en/functio...ericentity.php dekodieren. | |
| | |
| | Nach oben #9 | |
| Martin Eisengardt Registriert seit: 30.03.2006 Ort: Pfinztal
Beiträge: 355
| Zitat:
UTF-8 ist böse bzgl. Umlauten, da ich kaum glaube, dass deine QQuellcodes in UTF-8 sind. Internet Explorer ist böse. Gibst du irgendwo einen Zeichensatz an? via header() oder Meta-Tag? Zum Beispiel. <meta http-equiv="content-type" content="text/html; charset=utf-8" /> wenn Ja: Ändere das mal spasseshalber. Deine PHP-Quellen werden wohl zu 100% nicht als UTF-8 gespeichert. Damit ist es völliger Humbug, das 'ü' aus der readdir-Funktion mit einem 'ü' aus dem PHP-Code vergleichen zu wollen. Das lernt man schon in C-Zeiten, dass Windows böse ist *g* Mein Beispiel von oben sollte einen Hinweis darauf geben, denn 'ü' wird aus Ascii-Sicht als #252 ausgegeben, also als was völlig anderes. In UTF-8 würde soweit ich das auswendig noch weis 195 oder sowas rauskommen, denn ord berücksichtigt nur das erste Zeichen und die Umlaute sind bei utf-8 in zwei Zeichen kodiert. Bei ord() kommt dann bei allen per utf-8 kodierten Umlauten 195 raus. Lange Rede, kurzer Sinn. Das, was readdir ausgibt, ist !nicht! UTF-8. Das was readdir ausgibt ist !nicht! "normales" Ascii. Dein Zielzeichensatz ist jedoch utf8 (irgendwo per Header oder sonstwo festgelegt), so dass wahlweise PHP, Apache oder der Internet Explorer das Zeichen "kaputt" machen. Die Funktionen, die ihr sucht, fangen alle mit mb_ an... P.S.: Das was bei readdir rauskommt, sollte zweifelsfrei ISO-8859-1 sein.
__________________ Open Sourcing the Online Gaming Universe PHP/SQL/Java/C++/Assembler. Seit Jahren Mitglied und Entwickler in einem der wohl größten Java-Projekte der Welt: http://weblogs.java.net/blog/hansmul...e_desktop.html Geändert von mepeisen (28.03.2007 um 16:29 Uhr). | |
| | |
| | Nach oben #10 | |||
| Erfahrener Benutzer Registriert seit: 18.08.2005
Beiträge: 108
| Nein, utf-8 ist da ganz toll Zitat:
Für Gewissheit bräuchten wir natürlich ne URL zum selberangucken. Zitat:
Zitat:
Von daher glaube ich ihm, dass das Debian ihm utf-8 liefert. Windows und OSX scheinen sich aber verpflichtet zu fühlen, die hohen utf-Zeichen zu maskieren. | |||
| | |
| | Nach oben #11 | ||||||
| Martin Eisengardt Registriert seit: 30.03.2006 Ort: Pfinztal
Beiträge: 355
| Zitat:
[/quote] Zitat:
Ich hab in meiner Jugend zu lange DOS gemacht seufz. OK. Ich verbessere mich: 'ü', das von readdir geliefert wird, ist ein Byte mit der Dezimal-Repräsentation #252. Das deutet auf den von mit im PS angedeuteten Zeichensatz hin... Und nicht auf UTF-8. Zitat:
Zitat:
Wenn ich ihm aber per HTTP-Header den korrekten ISO-Zeichensatz vorgebe, wird auch nix maskiert. Erst wenn ich ihm sage, dass das HTML-Dokument ein UTF-8 sei, macht irgendwer was merkwürdiges. Das deutet darauf hin, dass der Rückgabewert von readdir völlig in Ordnung ist. Alle Versuche, da was zu konvertieren, müssen eigentlich scheitern, weils da imho nichts zu konverteiren gibt.
__________________ Open Sourcing the Online Gaming Universe PHP/SQL/Java/C++/Assembler. Seit Jahren Mitglied und Entwickler in einem der wohl größten Java-Projekte der Welt: http://weblogs.java.net/blog/hansmul...e_desktop.html | ||||||
| | |
| | Nach oben #12 |
| Erfahrener Benutzer Registriert seit: 31.12.2006 Ort: Zürich
Beiträge: 298
|
Die Dateien werden alle in UTF-8 abgespeichert (ich arbeite mit Eclipse und Zend Studio und habe es in beiden Editoren so eingestellt) Ich hab jetzt mal eine Datei namens "ä.txt" angelegt und folgenden Coder verwendet: PHP-Code: Code: 3 2 97 a¨ Weil das ä ja 3 Zeichen lang ist, hab ich meinen Code mal ergänzt: PHP-Code: Code: 3 2 97 204 136 a¨
__________________ . <-- This is Punkt. Copy Punkt into your signature to help him on his way to world domination. |
| | |
| | Nach oben #13 |
| Erfahrener Benutzer Registriert seit: 18.08.2005
Beiträge: 108
|
Argl, ich hab jetz raus was das is. Das ist Unicode, aber recht bescheuertes. Anstatt ä und ü direkt zu schreiben bekommst Du erst das a bzw. u und dann Postfix als eigenes (diakritisches) Zeichen die Punkte. Schau mal was Unicode 0308 is: http://de.wikipedia.org/wiki/Interna...sches_Alphabet Vielleicht machts ja der Ersteller der Datei kaputt? Erstell die mal mit PHP, und gib dabei den Dateinamen in utf-8 mit normalem ä an. |
| | |
| | Nach oben #14 | |
| Erfahrener Benutzer Registriert seit: 31.12.2006 Ort: Zürich
Beiträge: 298
| Zitat:
PHP-Code: Liegt wohl am Filesystem (Mac OS Extended (Journaled)) //EDIT: Doch nicht... Die Datei wird noch krasser... (a\u0308ou\u0308\u0308.txt) Siehe Anhang.
__________________ . <-- This is Punkt. Copy Punkt into your signature to help him on his way to world domination. Geändert von Bleistift (28.03.2007 um 19:05 Uhr). | |
| | |
| | Nach oben #15 |
| leftover when bar closes Registriert seit: 29.06.2006 Ort: Bern
Beiträge: 123
|
*rofl* Sorry, btt
__________________ Unkraut ist die Opposition der Natur gegen die Regierung der Gärtner. ticketbörse |
| | |
| | Nach oben #16 |
| Bastian Fenske Registriert seit: 04.01.2006 Ort: Kassel
Beiträge: 826
|
Die hier gehen in die Richtung: http://bugs.php.net/bug.php?id=14100 http://bugs.php.net/bug.php?id=39660 Basti PS: Ich speichere auch jede PHP-Datei in UTF-8 (auch, wenn in "normalen" Quellcode-Dateien kein Nicht-ASCII-Zeichen zu finden sein wird) und gebe immer UTF-8 aus (META-Tag reicht natürlich nicht. Content-Type-Header muss auch explizit (oder implizit durch den Server) gesetzt werden - zusätzlich noch die Angabe in der XML-Deklaration). |
| | |
| | Nach oben #17 | |
| Erfahrener Benutzer Registriert seit: 31.12.2006 Ort: Zürich
Beiträge: 298
|
Suuuper Lösungsvorschlag: Zitat:
Wenigstens kann es mein Server. Das ist eigentlich das wichtigste
__________________ . <-- This is Punkt. Copy Punkt into your signature to help him on his way to world domination. | |
| | |
| | Nach oben #18 |
| Erfahrener Benutzer Registriert seit: 31.12.2006 Ort: Zürich
Beiträge: 298
|
Auch noch lustig: PHP-Code:
__________________ . <-- This is Punkt. Copy Punkt into your signature to help him on his way to world domination. |
| | |
| | Nach oben #19 |
| Martin Eisengardt Registriert seit: 30.03.2006 Ort: Pfinztal
Beiträge: 355
|
Ich dachte du legst die Datei im Explorer oder so an. Dann bauts Windows auch kein Multibyte aus dem ä. So wie du es jetzt hast, ist das sogar logisch, dass das nicht zusammenpasst. Du erwartest, dass ein Unicde-Zeichen (also dein Original als UTF-8 generiertes ä) von Windows in ein Ein-Byte-Zeichen umgewandelt wird. Wieso sollte Windows das tun? Die WinApi verliert sich darüber kein einziges Wort. Also: working as intended. Wenn Windows sowas machen würde (was technisch unmöglich ist) würde es Dateinamen verfälschen und es wäre bis in die Ewigkeit für alle (also die Nicht-Unicode-sprechenden Programme) unmöglich, eine Datei zu öffnen, die laut Dateisystem Sonderzeichen enthält. Dass du also von readdir ein Multibyte-Zeichen zurückkriegst, ist völlig normal. So stehts auch im Dateisystem und ist ine verständliche Reaktion. Wer das nun fehlinterpretiert ist doch eigentlich egal. Ausm Apache kommts bei mir noch korrekt raus. Kann man bequem via Java oder so prüfen. Bei mir macht erst der Explorer die Maskierung. Und das wohl nur, weil er merkt, dass der Zeichensatz verletzt wird und statt das Zeichen als "undefinierbar" darzustellen oder als zwei einzelne Zeichen, interpretiert er es wohl als Multibyte-Zeichen und wen man das ganze dann anguckt, wirds merkwürdig, weil der Explorer maskiert. Das ist mir mit Java schon unzählige Male passiert. Mich störts nicht, denn wenn man es in einem Formular o.ä. wieder zurückschickt, wirds wieder richtig in PHP ankommen. Also richtig im Sinne eines Multibyte-Zeichens. Dass PHP kein Unicode spricht. Dass PHP keine Multibyte-Zeichen von Haus aus verwaltet, sondern nur einfache Chars, ist doch schon ewig bekannt. Es ruft für readdir unter Windows schlichtweg die falschen Methoden auf und kann gar keine richtigen Ergebnisse zurückkriegen. Lange Rede kurzer Sinn: Ich wies am Anfang auf die mb-Funktionen hin. Mit diesen lässt sich das Ergebnis des readdir sinnvoll analysieren und so verarbeiten, dass keine Maskierung seitens Explorer notwendig ist.
__________________ Open Sourcing the Online Gaming Universe PHP/SQL/Java/C++/Assembler. Seit Jahren Mitglied und Entwickler in einem der wohl größten Java-Projekte der Welt: http://weblogs.java.net/blog/hansmul...e_desktop.html Geändert von mepeisen (28.03.2007 um 21:18 Uhr). |
| | |
| | Nach oben #20 |
| Erfahrener Benutzer Registriert seit: 31.12.2006 Ort: Zürich
Beiträge: 298
|
Nur der Vollständigkeit halber: Die Screenshots sind unter OS X erstellt worden. Aber wohl genau das selbe Problem. Jedenfalls danke, ich werde mir das mal genau ansehen.
__________________ . <-- This is Punkt. Copy Punkt into your signature to help him on his way to world domination. Geändert von Bleistift (28.03.2007 um 21:27 Uhr). |
| | |
![]() |
| Lesezeichen |
| Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1) | |
| Themen-Optionen | |
| |
Ähnliche Themen | ||||
| Thema | Autor | Forum | Antworten | Letzter Beitrag |
| mail() sendet keine richtigen Umlaute an Outlook | derMaggus | PHP-Programmierung | 2 | 05.09.2007 12:38 |
| Umlaute etc. ersetzen | Basti | Gesuche | 7 | 02.04.2007 19:32 |
| Umlaute und Ajax? | Skinwalker | PHP-Programmierung | 8 | 26.03.2006 12:38 |
| umlaute bei mysql 4.1.12 | denis_hanke | Datenbanken | 1 | 06.12.2005 13:07 |
| Umlaute in Subject bei JavaMail | bushmaster | Allgemeine Java-Programmierung | 2 | 03.02.2005 05:47 |