Russische Dateinamen

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Russische Dateinamen

    Hallo,

    ich hab das gelcihe problem wie immer wenn ich in utf8 bzw. russisch code,bisher hab ich fast alle probleme lösen können, nun will ich aber dateien öffnen mit php die kyrillische Namen haben, beim auslesen kommt natürlich nur ?????.htm raus, wie bring ich php nun dazu das es auch die dateinamen erkennt?
    Zuletzt geändert von Jeremias; 20.01.2009, 19:26.

  • #2
    wie bring ich php nun dazu das es auch die dateinamen erkennt?
    welches os? welche codierung beim os? sind die php-dateien denn auch in uft8 abgespeichert?

    peter
    Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
    Meine Seite

    Kommentar


    • #3
      hallo, script und dateien sind natürlich in utf8 abgespeichert, ich benutze ja auch schon lange utf 8 strings (z.B.auch mb funktionen etc.)

      der testrechner is win xp, kann natürlich russische zeichen darstellen und ich schreib auch in russisch

      Kommentar


      • #4
        Re: Russische Dateinamen

        Original geschrieben von Jeremias
        ... wenn ich in utf8 bzw. russisch code,bisher hab ich fast alle probleme lösen können, nun will ich aber dateien öffnen mit php die kyrillische Namen haben, beim auslesen kommt natürlich nur ?????.htm raus, wie bring ich php nun dazu das es auch die dateinamen erkennt?
        Warum sollte PHP-Probleme mit kyrillischen Zeichen in Dateinamen haben?
        Es sieht für mich eher so aus, als ob sie bei der Ausgabe nicht richtig kodiert/dargestellt werden. Denn geöffnet hast du sie ja schon -- oder hab ich dich nicht richtig verstanden?
        B.T.W. Quälcode und mehr Informationen zum Betriebssystem, auf dem das Script läuft, wären eventuell hilfreich.

        --
        Mist! Zu langsam. Also das mit dem Betriebssystem nehme ich hiermit zurück. ;-)
        Klingon function calls do not have “parameters”‒they have “arguments”‒and they always win them!

        Kommentar


        • #5
          Hi,stimmt, einfacher testcode:

          PHP-Code:
          <?  
          $verz=opendir ('wiki');  
          while ($file = readdir ($verz)) 
          {  
              
              
              
            if($file{0}!=".") 
            { 
              $endung = strchr($file, '.'); 
              $link = substr($file, 0, -4); 
              if($file != "." && $file != ".." && $file != "") 
              { 

                   echo $file." $link<br>";  

              } 
            } 
          }  
          closedir($verz);  
          ?>
          gibt ganz viele ???????.htm aus, öffnen kann ich die dateien dann natürlich nicht!

          Kommentar


          • #6
            Keinen / falschen Charset angegeben. Ein
            PHP-Code:
            header("Content-Type: text/html; charset=UTF-8"
            sollte wunder wirken.

            Kommentar


            • #7
              Bei "Öffnen" habe ich an fopen() gedacht. Du auch?
              Oder geht es dir nur um einen "anklickbaren" Link?

              Und wenn du Probleme mit Pfaden hast, dann ist es sinnvoll, erstmal zu schauen, ob es sich nicht nur um eines handelt, dass durch fehlendes oder fehlerhaftes "Zusammenkleben" der Teilstücke des Pfades handelt:

              PHP-Code:
              // is mir zu lang ;-)
              define ('DIR_SEP'DIRECTORY_SEPARATOR); 
              // dein (relativer) Verzeichnispfad
              $dir_path 'wiki';

              // relativen Pfad in absoluten Pfad umwandeln
              $dir_path realpath($dir_path); 
              $dh opendir($dir_path);
              while (
              $entry readdir($dh)) {
                if (
              '.' === $entry || '..' === $entry) {
                  continue; 
              // *nix-Quatsch ueberspringen
                
              }
                
              $absolut $dir_path DIR_SEP $entry;
               
                
              // weiterverarbeiten (oder ausgeben)
                
              echo 'rel: '$entry' ';
                echo 
              'abs: '$absolut'<br />'
              }
              closedir($dh); 
              ... und mit substr() in UTF-8-Strings herumzufuhrwerken, halte ich für keine sehr gute Idee (das Überladen der PHP-Stringfunktionen mit der mb_string-Erweiterung auch eher nicht).
              Zuletzt geändert von fireweasel; 20.01.2009, 19:52.
              Klingon function calls do not have “parameters”‒they have “arguments”‒and they always win them!

              Kommentar


              • #8
                Hi, header kann/muss ich nicht setzen da ich die datei ja schon als utf8 abgespeichert habe (der also quasi schon gesetzt ist)

                eigentlich will ich die dateien auch öffnen, ich hatte erstmal versucht den dateinamen direkt anzugeben (also фаил.htm, hoffe das forum zerreist das nu nicht) dann hat er mir aber einfach gesagt die datei existiert nicht.
                Da ich sowas schon erwartet hatte hab ich dann erst mal versucht mir die dateien anzeigen zu lassen und dazu eben dieses script benutzt

                das mit dem zusammenkleben etc versteh ich nu nicht ganz? Also er ist schon im richtigen ordner, und zeigt mir die dateien ja eigentlich auch an, aber für jedes kyrillische zeichen setzt er mir halt leider ein '?'

                Warum sollte ich nicht mit mb_string arbeiten? Erst mal brauch ich es weil die welt nunmal nicht nur aus lateinischen zeichen besteht und ich eine russische Seite entwerfe die viel mit wörtern rumbastelt und zweitens funktioniert es prima (wenn man ein bisschen geduld hat zum erfahrungen sammeln )

                also ihr könnt das script ja mal selbst ausprobieren und euren dateien russische namen geben (einfach irgendeinen text von mail.ru kopieren oder sonstewas)

                Kommentar


                • #9
                  Ob UTF-8 oder nicht spielt ja wohl für substr keine Rolle, nur die Ausgabe wird möglicherweise nicht so sein wie man es sich vorgestellt hat.

                  Ich habe auch schon mit Dateien arbeiten müssen, welche kyrillische Zeichen in ihrem Dateinamen hatten und das bereitete für PHP keine Probleme.

                  Für die Korrekte Darstellung mit &#NR; findest du mit Google -> UTF-8 encoding ohne Probleme genügend Infos.

                  Kommentar


                  • #10
                    �NR; ?? was heisst das?


                    Ja aber wieso funktioniert dann das script nicht wenn php damit keine proleme hat? (was ja allgemein nun nicht wirklich stimmt, man muss schon einiges umstellen wenn man plötzlich abseits lateinischer buchstaben arbeitet,deshalb hat mich das mit dem dateiproblem jetz auch gar nicht verwundert)

                    Ich könnte mir vorstellen das vielleicht utf8_decode abhilfe schaffen könnte, aber ich weiß nicht wo ich es einsetzen soll.

                    Kannst du mir ein beispiel geben wie ich einfach z.B. die datei фаил.htm mit fopen öffnen könnte? einfach so reinschreiben rafft mein php auf jeden fall nicht...)

                    PS, ohne von dem eigentlich problem ablenken zu wollen. mb_substr ist schon nötig, und wenn das vorher nicht mit mb_internal_encoding("UTF-8"); entsprechend eingestellt ist verhält es sich auch relativ merkwürdig da der bytecode der zeichen quasi mittendrin durchgeschnitten wird und man plötzlich ganz andere buchstaben hat.
                    Zuletzt geändert von Jeremias; 20.01.2009, 20:18.

                    Kommentar


                    • #11
                      Hi, header kann/muss ich nicht setzen da ich die datei ja schon als utf8 abgespeichert habe
                      Nicht wirklich. Der Zeichensatz deiner PHP-Datei hat mit dem der HTML-Ausgabe erstmal nichts zu tun. Wenn dein Apache dann auch noch dumm konfiguriert ist, ist zum Beispiel Latin1 der Standardzeichensatz. Den musst du dann über einen header übersteuern.

                      Kommentar


                      • #12
                        Ja, man "sieht" dann wie gesagt andere Buchstaben, aber für substr macht es keinen Unterschied.

                        Und nein ich glaube nicht, dass ich diese Datei so öffnen könnte (mit diesem Dateinamen im Quelltext), aber ich kann einen Ordner auslesen und die dort ausgelesenen Dateien beliebig öffnen und auslesen.

                        utf8_decode nützt dir da sehr wahrscheinlich nichts, da PHP dieses Charset afaik nicht unterstützt (weiss ich aber nicht sicher), aber wie gesagt zum encodieren in utf 8 und zurück findest du sehr viel.
                        Hier einmal ein Beispiel, in welchem dir der Aufbau und eine mögliche Umwandlung gezeigt wird: http://www1.tip.nl/~t876506/utf8tbl.html

                        Kommentar


                        • #13
                          also ich hats kurz mal ausprobiert, war kein unterschied, abgesehen davon arbeite ich ja schon die ganze zeit mit russischen zeichen, das ist ansonsten kein problem, nur bei den dateien klappt es nicht.

                          Kommentar


                          • #14
                            @jmc, das kommt mir grad vor wie mit Kanonen auf spatzen schiessen.

                            Die gesamte Seite arbeitet bisher mit UTF8, und ich hab alles von formularsenden, mb_* (das die funktion an sich funktioniert is ja schnuppe solange die ausgabe nicht stimm), mysql einstellen, pdf erzeuger oder sonstewas ist hab ich ich alles möglichkeiten für gefunden. Da muss es doch auch jetzt bei diesen dateien eine lösung geben?

                            Also warum sehe ich nur fragezeichen bei dem oben geposteten script, header ist auf utf8, andere scripts in der gleichen dateien funktionieren mit kyrillisch, also ich verstehs nicht?!
                            Zuletzt geändert von Jeremias; 20.01.2009, 20:39.

                            Kommentar


                            • #15
                              Original geschrieben von Jeremias
                              eigentlich will ich die dateien auch öffnen, ich hatte erstmal versucht den dateinamen direkt anzugeben (also фаил.htm, hoffe das forum zerreist das nu nicht) dann hat er mir aber einfach gesagt die datei existiert nicht.
                              Da ich sowas schon erwartet hatte hab ich dann erst mal versucht mir die dateien anzeigen zu lassen und dazu eben dieses script benutzt
                              Ich hab das gerade mal ausprobiert -- und du hast den Fehler schon vollkommen richtig beschrieben. Die PHP-Verzeichnisfunktionen readdir() und auch scandir() geben statt "fremder" Zeichen tatsächlich nur ein Fragezeichen (ASCII-Code 0x3F) zurück. Ganz tolle Wurst. Qualitätssoftware eben. ;-)

                              das mit dem zusammenkleben etc versteh ich nu nicht ganz? ...
                              Hat sich auch erledigt. Ich hatte nur einen der üblichen Anfängerfehler vermutet. Tut mir leid, wenn ich dein Wissen unterschätzt habe.

                              Warum sollte ich nicht mit mb_string arbeiten? ...
                              Ich habe nichts gegen die mb-Extension an sich, nur das Überladen der Stringfunktionen kann Probleme bereiten, wenn man die PHP-Strings an anderen Stellen im Script noch als Container für Binärdateien "missbraucht". Ich mache letzteres gerne -- deswegen nehme ich von der Überladung lieber Abstand.

                              also ihr könnt das script ja mal selbst ausprobieren und euren dateien russische namen geben (einfach irgendeinen text von mail.ru kopieren oder sonstewas) [/B]
                              Hab ich -- hier die Ausgabe von scandir():
                              Code:
                              list(7) {
                                [0] => string(13) '--output.html'
                                [1] => string(1) '.'
                                [2] => string(2) '..'
                                [3] => string(10) '??????.htm'
                                [4] => string(13) '?????????.htm'
                                [5] => string(18) '??????_(?????).htm'
                                [6] => string(19) '??????_(??????).htm'
                              }
                              ... im Vergleich zum Original (Listing im Browser):
                              Code:
                              --output.html	HTML Document	1 KB	20.01.2009 20:26:36	
                              Екатерина.htm	HTML Document	32 KB	20.01.2009 20:23:24	
                              Катюша.htm	HTML Document	28 KB	20.01.2009 20:23:26	
                              Катюша_(оружие).htm	HTML Document	75 KB	20.01.2009 20:23:20	
                              Катюша_(песня).htm	HTML Document	35 KB	20.01.2009 20:23:16
                              Hab die Wikipedia missbraucht, um Beispieldateien zu bekommen. ;-)

                              Eine erste (schnelle) Google-Recherche macht nicht viel Hoffnung:
                              http://www.google.co.uk/search?hl=en...f-8+windows+xp
                              ... wenn man das Datum der Bugreports sieht ...
                              Zuletzt geändert von fireweasel; 20.01.2009, 20:53.
                              Klingon function calls do not have “parameters”‒they have “arguments”‒and they always win them!

                              Kommentar

                              Lädt...
                              X