Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] Leidiges Thema Umlaute bzw. Charset

Einklappen

Neue Werbung 2019

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

  • HerrFrie
    hat ein Thema erstellt [Erledigt] Leidiges Thema Umlaute bzw. Charset.

    [Erledigt] Leidiges Thema Umlaute bzw. Charset

    Schon wieder brauche ich Hilfe. Die Suchfunktion hat mir zwar reichlich Themen angezeigt, nur wird das alles sehr unübersichtlich und hilft mir nicht genau weiter.

    Ich bin dabei eine Anzeige für eine Bildergalerie zu vereinfachen und möchte folgendes erreichen.
    Es existiert ein Skript, welches den Ordner 'bilder' überprüft. Werden dort Unterordner mit Bildern gefunden, sollen die jeweiligen Unterordner als Link aufgelistet werden. Z.B. Sommer2006, Schützenfest2010.
    Ich übergebe den Ordnernamen dann an ein weiteres Skript, welches mir die Bilder dann als Thumbs auf den Bildschirm verteilt. Soweit funktioniert alles.
    Da es sich um eine Seite eines Schützenvereins handelt, kommen in den Ordnernamen also auch 'ü' und so vor. Die Anzeige bei der Auflistung wird richtig angezeigt und auch die Übergabe, die man unten im Browser sehen kann zeigt ein 'ü' an. Wenn jetzt die Seite des Unterordners 'Schützenfest2010' geöffnet wird, wird der Name auch richtig übergeben, der wird als Überschrift angezeigt. In der Pfad-Anzeige des Browsers steht allerdings anstelle des 'ü' ein '%FC'. Da sich sämtliche Pfade zur Verarbeitung der Bilder auf den übergebenen Namen beziehen und das dann auch nicht richtig funktioniert, wird auch leider kein Bild angezeigt.

    Die Bilderordner lade ich einfach per ftp mit dem Total Commander hoch.

    Als Standard habe ich in der PHP.ini den Charset ISO-8859-1 eingestellt.

    Meine Frage wäre, wie ich das Problem am einfachsten lösen kann.
    Welcher Charset sollte man benutzen, ISO-8859-1 oder UTF-8, die Meinungen gehen stark auseinander.

    Ich hoffe, es ist nicht zu kompliziert beschrieben.

    Gruß
    HerrFrie

  • Gast-Avatar
    Ein Gast antwortete
    @RustXXL: So funktioniert es natürlich auch

    Einen Kommentar schreiben:


  • HerrFrie
    antwortet
    Das hört sich doch schon mal alles verständlich für mich an. Schon mal besten Dank, ich werde das nachher direkt mal probieren !

    Gruß
    HerrFrie

    Einen Kommentar schreiben:


  • RustyXXL
    antwortet
    Datei includes_conf.php:
    PHP-Code:
    $inc['1'] = 'gallery.php';
    $inc['2'] = 'guestbook.php';
    $inc['3'] = 'helloworld.php'
    Datei index.php:
    PHP-Code:
    include 'includes_conf.php';
    if(
    array_key_exists((int) $_GET['id'], $inc))
    {
        include 
    $inc[(int) $_GET['id']];
    }
    else
    {
        echo 
    'Datei nicht gefunden';

    So braucht man die entsprechenden Seiten nur in der includes_conf.php jeweils hinzuzufügen, und muss nicht irgendwelche switch-cases jedes mal bearbeiten. Das ganze könnte man dann auch noch mit glob() kombinieren, dann muss man sich aber was einfallen lassen, wie man die jeweilige id definiert (zum Beispiel könnte man die id im Dateinamen mit verschlüsseln).

    Einen Kommentar schreiben:


  • Gast-Avatar
    Ein Gast antwortete
    Das geht auch über eine Datei per Datenbank.

    Deine Beschreibung zu meinem Beispiel ist korrekt. Nachteil, du must bei jeder PHP Datei die du neu in deinen Ordner hochlädst diese Datei mit den Case Beispielen editieren.

    Die Dateien die du mit der Datenbank bzw. mit der Switch/Case Funktionen füllst, musst du dann natürlich in der index.php bekannt machen per Include

    Einen Kommentar schreiben:


  • HerrFrie
    antwortet
    Hmm,

    wenn meine Startseite also z.B. index.php heißt und ich im Menü oder so einen Link www.sonstwas.de/index.php?id=7 aufrufe, dann würde dein Code mit in der index.php stehen und über die case Anweisung müssten dann alle benutzten id's drin stehen, die dann mit include den richtigen Skripten zugewiesen werden.
    War das so richtig ?
    Ohne Datenbank könnte man aber über den Quelltext trotzdem die Dateien rausfinden, also wäre eine Datenbank besser ? Geht das auch ohne Datenbank mit einer eigenen Datei oder so ?

    Somit gibt es also keine eigene Funktion oder Befehl für sowas und wird also komplett von Hand zugewiesen ?

    Einen Kommentar schreiben:


  • Gast-Avatar
    Ein Gast antwortete
    Simple Lösung!

    PHP-Code:
    <?php
    $var1 
    $_GET['id'];

    switch(
    $var1) {
        case 
    1:
               include 
    '222222.php';
               break;
    }
    ?>
    Oder du hinterlegst die ID's in der Datenbank mit .php Dateien.
    Dann liest du Sie aus und Includiest sie!

    Einen Kommentar schreiben:


  • HerrFrie
    antwortet
    Hallo Jens,
    ich weiß schon, wie ich eine übergebene Variable greifbar mache, es geht mir eher darum, dass ich nicht sowas als Link übergebe :

    PHP-Code:
    http://www.sonstwas.de/?name=geheimskript.php 
    sondern
    PHP-Code:
    http://www.sonstwas.de/?id=12 
    Ich weiß aber nicht, wie das gemacht wird und wonach ich da wirklich suchen kann/soll.

    Einen Kommentar schreiben:


  • Gast-Avatar
    Ein Gast antwortete
    Zitat von HerrFrie Beitrag anzeigen
    Hallo Nikosch,

    Ich habe mal 'url über id' und 'url verschlüsselung' ...

    $_GET

    PHP: $_GET - Manual

    Einen Kommentar schreiben:


  • HerrFrie
    antwortet
    Hallo Nikosch,

    das mit den ID's habe ich schon öfters gesehen und fand das auch gut. Wie genau funktioniert das ? Ich habe mal 'url über id' und 'url verschlüsselung' als Suchbegriff probiert, habe da aber nicht das gefunden , was du erklärt hast. Wonach genau muß ich da suchen ?

    Ich hoffe ich verstehe das richtig. Meine Skripte haben weiterhin die Bezeichnung index.html, galerie.php, ... und die id ist diesen dann nur zugeteilt ?

    Gruß
    HerrFrie

    Einen Kommentar schreiben:


  • nikosch
    antwortet
    [keine Antwort]

    Ich sag mal so, UTF-8 ist auch mehr die Antwort auf allgemeine Zeichensatzprobleme bei der Anzeige. Was Dateisystem (und gerade auch die Übergabe via URL) anbelangt, gibt es da noch andere Überlegungen.

    Die Hauptüberlegung:
    - UTF-8-Sonderzeichen in der URL werden zwar großglächig unterstützt, sind aber genau genommen kein Standard. Das kann also immer zu Problemen führen
    - URL-basierte dynamische Verzeichnisteile sind ein Sicherheitsrisiko in der Applikation. Damit kann es möglich werden, beliebige Files auf dem Server auszulesen. Ja, auch Logfiles oder Dateien, in denen Deine Zugriffsdaten auf die DB stehen etc.
    - UTF-8 als Filesystemzeichensatz ist ebenfalls mit Vorsicht zu genießen

    Summ Summarum:

    - Du solltest Deine URLs auf Basiszeichen oder sogar IDs beschränken
    - Über diese IDs kannst Du Deine Verzeichnisse ansprechen (das ist auch besser, wenn man dort mal eine Bezeichnung ändert)
    - Die „optische“ webseitige Beschriftung des Ordners solltest Du als Metadaten (bspw. in einer Datenbank relational bezogen zum echten Verzeichnisnamen) abspeichern. Da drin kann dann noch mehr stehen (wer hats angelegt, ein Icon, eine Beschreibung etc.)

    Einen Kommentar schreiben:


  • HerrFrie
    antwortet
    Danke,

    bei meiner Testseite habe ich gerade festgestellt, dass zwar der Pspad auf UTF-8 eingestellt war, er aber warum auch immer als Ansi gespeichert hat. Ich habe das nun umgestellt und jetzt funktioniert das auch. Habe das auch mit den Hauptseiten der restlichen HP gemacht und auch das wird jetzt richtig angezeigt.

    Jetzt muß ich erst mal weiter sehen, ob ich den Rest von meinem Problem selber in den Griff bekomme.
    Aber eine spontane Frage hätte ich noch. Gibt man den Charset im Header IMMER an, auch wenn man das z.B. in der .htaccess, bzw. php.ini schon als standard deklariert hat ?

    Gruß
    HerrFrie

    Einen Kommentar schreiben:


  • fireweasel
    antwortet
    Zitat von HerrFrie Beitrag anzeigen
    Wenn ich das jetzt richtig verstanden habe, dann sollte es funktionieren, wenn ich als standard, bzw. im Skript utf-8 als charset auswähle und das skript auch als utf-8 abspeichere.
    Das ist nur die halbe Miete. Du musst dem Browser auch mitteilen, dass dein Text in UTF-8 kodiert wurde. Sonst versucht der Browser, zu erraten, was du gemeint hattest. Das klappt manchmal, geht aber oft schief.

    Es hat sich bewährt, dabei eine Doppel-Strategie zu fahren:

    Zuerst sagt der Webserver (oder das PHP-Script, was dort läuft) per HTTP-Header, welche Kodierung verwendet wurde:

    PHP-Code:
    // allererste Ausgabe im Script:
    header('Content-Type: text/html; charset=utf-8'); 
    Dazu kommt eine Angabe im HTML-Header:
    Code:
    <html>
    <head>
    <meta http-equiv="content-type" content="text/html; charset=UTF-8">
    <!-- allererste Angabe im Header -->
    </head>
    Für XHTML tut es auch die Angabe der Kodierung in der XML-Deklaration:

    Code:
    <?xml version="1.0" encoding="UTF-8" ?>
    <html>
    <head>
    <!-- usw. -->
    Dies stellt sicher, dass auch eine "heruntergeladene" Seite noch richtig dargestellt werden kann.

    Ich arbeite mit pspad und habe dort utf-8 als standard ausgewählt.
    Eine aktuelle Version von PSPad sollte keine Probleme bereiten. Insbesondere speichert PSPad nicht diese dämliche BOM vor UTF-8-Texten, wie es diverse andere Tools tun.

    Allerdings wird auf einer Testseite, bei der ich mir einfach äöü anzeigen lasse, nur ein komisches viereck angezeigt.
    Das könnte daran liegen, dass du dem Browser nicht gesagt hast, dass die Testseite in UTF-8 kodiert wurde. Siehe oben.

    Es kann aber auch andere Ursachen haben, die man ohne den Text zu sehen, aber schlecht beurteilen kann. Beispielsweise kann die von dir eingestellte Schriftart (der Font) die entsprechenden Zeichen gar nicht eingebaut haben.

    Könnt ihr mir nicht noch einen Tipp geben ?
    Schau dir die heruntergeladene und abgespeicherte Testseite mit einem Hexviewer an. Der von dir verwendete TotalCommander kann dies in seinem eingebauten Anzeigetool mit Druck auf [F3]. Danach drückst du nochmal nur die [3] und du bist im Hex-Modus. Damit kannst du erkennen, ob und wie der Text wirklich kodiert wurde.

    Einen Kommentar schreiben:


  • HerrFrie
    antwortet
    Ich habe jetzt noch einmal hier im Forum gesucht und bei den alten Beiträgen angefangen.

    Wenn ich das jetzt richtig verstanden habe, dann sollte es funktionieren, wenn ich als standard, bzw. im Skript utf-8 als charset auswähle und das skript auch als utf-8 abspeichere. Ich arbeite mit pspad und habe dort utf-8 als standard ausgewählt.
    Allerdings wird auf einer Testseite, bei der ich mir einfach äöü anzeigen lasse, nur ein komisches viereck angezeigt.

    Könnt ihr mir nicht noch einen Tipp geben ?

    Einen Kommentar schreiben:


  • HerrFrie
    antwortet
    Ok,
    habe gerade mal eine dummy-Erklärung gefunden, die mir schon mal soweit geholfen hat, dass ich jetzt verstehe warum eher utf-8 benutzt werden soll.

    ABER, heißt das jetzt, dass ich vorhandene Skripte/Seiten, auf denen Sonderzeichen vorkommen, neu als utf-8 abspeichern muß und es wird wieder ein ä,ö oder ü angezeigt, oder wird das schwieriger ?

    Einen Kommentar schreiben:

Lädt...
X