| PHP Developer Forum Hier habt ihr die Möglichkeit, eure Skriptprobleme mit anderen Anwendern zu diskutieren. Seid so fair und beantwortet auch Fragen von anderen Anwendern. Dieses Forum ist sowohl für ANFÄNGER als auch für PHP-Profis! Post your PHP questions here! |
 |
|

20-01-2009, 18:54
|
|
Jeremias
Newbie
|
|
Registriert seit: Jan 2009
Beiträge: 8
|
|
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?
Geändert von Jeremias (20-01-2009 um 19:26 Uhr)
|

20-01-2009, 19:02
|
Kropff
  Administrator
|
|
Registriert seit: Mar 2002
Ort: Köln
Beiträge: 11.308
|
|
Zitat:
|
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
|

20-01-2009, 19:26
|
|
Jeremias
Newbie
|
|
Registriert seit: Jan 2009
Beiträge: 8
|
|
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
|

20-01-2009, 19:30
|
 |
fireweasel
Registrierter Benutzer
|
|
Registriert seit: Sep 2008
Ort: At home
Beiträge: 680
|
|
Re: Russische Dateinamen
Zitat:
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. ;-)
__________________
PHP-Code:
class Brick implements Throwable {
// ...
}
|

20-01-2009, 19:34
|
|
Jeremias
Newbie
|
|
Registriert seit: Jan 2009
Beiträge: 8
|
|
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!
|

20-01-2009, 19:43
|
|
PHP-Desaster
PHP Expert
|
|
Registriert seit: Mar 2006
Beiträge: 3.104
|
|
Keinen / falschen Charset angegeben. Ein
PHP-Code:
header("Content-Type: text/html; charset=UTF-8")
sollte wunder wirken.
|

20-01-2009, 19:45
|
 |
fireweasel
Registrierter Benutzer
|
|
Registriert seit: Sep 2008
Ort: At home
Beiträge: 680
|
|
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).
__________________
PHP-Code:
class Brick implements Throwable {
// ...
}
Geändert von fireweasel (20-01-2009 um 19:52 Uhr)
|

20-01-2009, 20:08
|
|
Jeremias
Newbie
|
|
Registriert seit: Jan 2009
Beiträge: 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)
|

20-01-2009, 20:08
|
|
jmc
PHP Junior
|
|
Registriert seit: Mar 2006
Beiträge: 868
|
|
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.
|

20-01-2009, 20:15
|
|
Jeremias
Newbie
|
|
Registriert seit: Jan 2009
Beiträge: 8
|
|
�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.
Geändert von Jeremias (20-01-2009 um 20:18 Uhr)
|

20-01-2009, 20:20
|
|
PHP-Desaster
PHP Expert
|
|
Registriert seit: Mar 2006
Beiträge: 3.104
|
|
Zitat:
|
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.
|

20-01-2009, 20:24
|
|
jmc
PHP Junior
|
|
Registriert seit: Mar 2006
Beiträge: 868
|
|
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
|

20-01-2009, 20:24
|
|
Jeremias
Newbie
|
|
Registriert seit: Jan 2009
Beiträge: 8
|
|
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.
|

20-01-2009, 20:36
|
|
Jeremias
Newbie
|
|
Registriert seit: Jan 2009
Beiträge: 8
|
|
@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?!
Geändert von Jeremias (20-01-2009 um 20:39 Uhr)
|

20-01-2009, 20:45
|
 |
fireweasel
Registrierter Benutzer
|
|
Registriert seit: Sep 2008
Ort: At home
Beiträge: 680
|
|
Zitat:
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. ;-)
Zitat:
|
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.
Zitat:
|
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.
Zitat:
|
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 ...
__________________
PHP-Code:
class Brick implements Throwable {
// ...
}
Geändert von fireweasel (20-01-2009 um 20:53 Uhr)
|
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
|
| Themen-Optionen |
|
|
| 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.
HTML-Code ist aus.
|
|
|
|
PHP News
|