kostenloser Webspace werbefrei: lima-city


Linux Ordner-/Dateiname verarbeiten

lima-cityForumHeim-PCBetriebssysteme

  1. Autor dieses Themas

    thwbm

    thwbm hat kostenlosen Webspace.

    Hallo,
    ich erstelle momentan ein kleines Programm mit PHP/Javascript, mit dem ich auf dem RaspberryPi Musik abspielen will. Als Betriebssystem verwende ich Raspbian. Ich arbeite grade noch an einem Dateimanager, der ähnlich wie der Dateimanager bei Linux bzw. Explorer bei Windows aussieht. Grundsätzlich funktionert das auch schon, mein Problem sind aber Ordnernamen wie
    !"§$%&()=?+*#'-_.:,;<>|²³{[]}\\
    oder
    \n
    die bei Linux problemlos erstellt werden können. Der Ordnername ist dabei ein Funktionsparameter einer JS-Funktion:
    <div onclick="ordnerStrukturAnzeigen('"/home/pi/ordner"')">

    Dieser Paramter wird mit jQuery via ajax an ein PHP Skript übertragen, dass dann die Befehle auf dem Server, also dem RaspberryPi ausführt.
    Wenn der Pfad zu einem Ordner ein Leerzeichen oder eine Klammer beinhaltet wird jeweils ein "\" (backslash) davorgepackt:
    ordnerPfad = ordnerPfad.replace(/ /g, "\\ ");
    ordnerPfad = ordnerPfad.replace(/\(/g, "\\(");
    ordnerPfad = ordnerPfad.replace(/\)/g, "\\)");

    Leider verzweile ich noch an Anführungszeichen. Was muss ich tun, damit
    /home/pi/"
    (Anführungszeichen ist ein Ordnername) als Parameter inerhalb des onclick-events funktioniert?

    Gibt es überhaupt verbotene Zeichen für Dateien/Ordner unter Linux, außer "/"? Wenn ja, welche sind es? Sind potentiel auch z.B. chinesische Schriftzeichen erlaubt?

    MFG THWBM
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. thomasba

    Co-Admin Kostenloser Webspace von thomasba

    thomasba hat kostenlosen Webspace.

    Das mit dem Backslash könnte durch den PHP-Konfigurationsparameter Magic Quotes. Welche PHP-Version kommt denn zum Einsatz?

    Bzgl des Quotes: Schonmal mit HTML-Entities probiert?

    Wenn du dir mal die Wikipedia-Seite zu ext4 anschaust, dann steht da, dass alle Zeichen außer dem NULL-Byte und dem "/" erlaubt sind. Damit also auch chinesische Zeichen.
  4. Autor dieses Themas

    thwbm

    thwbm hat kostenlosen Webspace.

    Hallo,
    ich nutzte PHP version 5.4.41-0+deb7u1. Magic Quotes klingen zwar interessant, wurden aber leider entfernt.

    Mit dem Stichwort "HTML-Entities" bin ich weiter gekommen. Ich habe
    addslashes
    und
    htmlentities
    kombiniert:
    $wert = addslashes(htmlentities($wert));


    Auf der Javascript-Seite habe ich das Problem in etwa so wie hier gelößt. Für die Anführungszeichen musste ich die Rückgabewert noch etwas anpassen:
    //Encodieren
    $("<div />").text(wert).html().replace(/\"/g, "&quot;");

    //Decodieren
    $("<div />").html(wert).text().replace(/&quot;/g, "\"");


    MFG THWBM
  5. Warte, irgendwas läuft hier gewaltig falsch. Magic Quotes ist grundsätzlich Mist. Das ist für "Entwickler" die zu blöd sind, die Eingaben richtig zu prüfen. Daher ist das - zu Recht - rausgeflogen. Siehe die Doku dazu. Für dich auch recht sinnfrei, da das afaik nur den Input von PHP betrifft. Lass den Sch..eibenkleister einfach. Verdräng' ihn, verbrenn' ihn, ertränke ihn. Ebenso wie mysql_*

    addslashes und htmlentities ist ebenfalls zusammen dämlich.
    Ich kann's dir nicht genau sagen, da dmir gerade die Testumgebung fehlt. Aber ein
    <div onclick="ordnerStrukturAnzeigen('<?php echo htmlentities($wert); ?>')">
    sollte passen.

    Und vergiss nicht die genauen Prüfungen, wenn du absolute Pfade erlaubst.
    Edit: Wenn du per Ajax die Pfade rumschickst, dann lade doch mal eine kleine Demo hoch mit dem JS und dem HTML.

    Beitrag zuletzt geändert: 23.7.2015 6:29:42 von muellerlukas
  6. Autor dieses Themas

    thwbm

    thwbm hat kostenlosen Webspace.

    muellerlukas schrieb:
    Warte, irgendwas läuft hier gewaltig falsch. Magic Quotes ist grundsätzlich Mist. [...] Lass den Sch..eibenkleister einfach. Verdräng' ihn, verbrenn' ihn, ertränke ihn.

    Ich habe mich nicht weiter reingelesen, da es ja entfernt wurde.
    addslashes und htmlentities ist ebenfalls zusammen dämlich.

    Inwiefern dämlich? Gibt es irgendeinen Grund, beides nicht in Kombination zu verwenden?
    <div onclick="ordnerStrukturAnzeigen('<?php echo htmlentities($wert); ?>')">

    In der Form nutze ich das nicht. Der
    <div>
    wird dynamisch von Javascript zusanmmengebaut.
    Und vergiss nicht die genauen Prüfungen, wenn du absolute Pfade erlaubst.

    Ich nutze absolute Pfade. Das Programm ist nicht dafür gedacht, vom Internat aus genutzt zu werden. Es soll nur vom LAN aus genutzt werden. Sollte ich trotzdem etwas prüfen?
    Edit: Wenn du per Ajax die Pfade rumschickst, dann lade doch mal eine kleine Demo hoch mit dem JS und dem HTML.

    Eine Demo ist schwierig, da ja der PHP-Befehl
    exec()
    ausfeführt werden muss. Wenn ich fertig bin lade ich wahrscheinlich den gesammten Quelltext einmal hoch.
  7. htmlentities maskiert Anführungszeichen bereits als &quot;, da wird dir addslashes zusätzlich nix bringen.
    Wie genau holst du denn jetzt den Wert mit Javascript und schreibst das div, wenn dus nicht als "einfache Ausgabe" schreibst?
  8. Autor dieses Themas

    thwbm

    thwbm hat kostenlosen Webspace.

    muellerlukas schrieb:
    htmlentities maskiert Anführungszeichen bereits als &quot;, da wird dir addslashes zusätzlich nix bringen.

    addslashes habe ich jetzt rausgenommen und es scheint tatsächlich keinen großen Unterschied zu machen. Ich hatte es eingebaut, da der Ordnername
    '
    (einfaches Anführungszeichen) an sonsten diese Fehlermeldung verursacht:
    SyntaxError: unterminated string literal

    Mit addslashes wurde das "'" zu einem "\'", wodurch sich JS nicht mehr beschwert hat. Leider hat dann aber irgendeine Abfrage nichtmehr gegriffen, da
    "'" != "\'"
    .
    Wie genau holst du denn jetzt den Wert mit Javascript und schreibst das div, wenn dus nicht als "einfache Ausgabe" schreibst?

    Ich hole mit jQuerys Ajaxfunktion die Inhalte der Ordner als Array (json) von einer PHP Datei. Javascript erstellt den
    <div>
    dann mit diesen Angaben über jQuerys
    .append
    -Funktion.
  9. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!