PHP-Upload Leerzeichen entfernen?

4 Antworten

<?php
$target_dir = "uploads/";
$filename = basename($_FILES["fileToUpload"]["name"]);
$filename = str_split($filename);
//Remove Spaces
$filenameNew = '';
foreach ($filename as $chr) {
  if($chr == ' '){
    $chr = '_';
  }
  $filenameNew .= $chr;
}
echo $filenameNew;
$target_file = $target_dir . $filenameNew;
$uploadOk = 1;
$imageFileType = strtolower(pathinfo($target_file,PATHINFO_EXTENSION));
// Check if image file is a actual image or fake image
if(isset($_POST["submit"])) {
    $check = getimagesize($_FILES["fileToUpload"]["tmp_name"]);
    if($check !== false) {
        echo "File is an image - " . $check["mime"] . ".";
        $uploadOk = 1;
    } else {
        echo "File is not an image.";
        $uploadOk = 0;
    }
}
// Check if file already exists
if (file_exists($target_file)) {
    echo "Sorry, file already exists.";
    $uploadOk = 0;
}
// Check file size
if ($_FILES["fileToUpload"]["size"] > 500000) {
    echo "Sorry, your file is too large.";
    $uploadOk = 0;
}
// Allow certain file formats
if($imageFileType != "jpg" && $imageFileType != "png" && $imageFileType != "jpeg"
&& $imageFileType != "gif" ) {
    echo "Sorry, only JPG, JPEG, PNG & GIF files are allowed.";
    $uploadOk = 0;
}
// Check if $uploadOk is set to 0 by an error
if ($uploadOk == 0) {
    echo "Sorry, your file was not uploaded.";
// if everything is ok, try to upload file
} else {
    if (move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $target_file)) {
        echo "The file ". $filenameNew. " has been uploaded.";
    } else {
        echo "Sorry, there was an error uploading your file.";
    }
}
?>

Hier tausche ich einfach alle Leerzeichen durch _

Woher ich das weiß:Studium / Ausbildung – Informatikstudent
RakonDark  19.01.2020, 21:41

grusselig ein workaround zu nehmen, tut auch gar nicht nötig, wir sind ja nicht mehr in dos zeiten. aber immerhin es bricht nicht mehr ab. aber es bleibt ein workaround der nicht not tut.

0

nein du entfernst nicht die leerzeichen , das ist zwar der richtig erkannte fehler , aber damit veränderst du ja den namen der datei , also unbrauchbar , weil du es auch nciht wiederherstellen kannst.

und nein man tauscht auch nicht gegen unterstriche , den dann hat man das problem bei namen mit unterstrichen das diese später fehlen wenn man diese wiederherstellen will .

einzig richtig ist das zu encoden , z.b. mit urlencode(string)

und dann wenn man fertig ist mit urldecode(string)

alle diese workarounds bei den kollegen hier also ersetzen mit nichts oder unterstrichen machen nur anfänger die noch nie was real umsetzen mussten , bzw die dem anwender erstmal eine anleitung mitgeben müssen welche dateien wie benannt werden müssen damit das überhaupt funktioniert . Und eins ist doch wohl klar im jahre 2020 mus man dem User gar nichts mehr sagen , man macht es einfach richtig und denkt vorher nach .

also lass dir nix erzählen hier , mach es gleich richtig , so das es auch mit allem funktioniert und die original namen erhalten bleiben .

stell dir mal vor eine webseite würde dir erstmal bei datei auswahl einen error melden ... sorry die datei hat unterstriche , bitte ändern sie das oder sie verlieren die unterstriche

RakonDark  20.01.2020, 00:20

oder noch besser rawurldecode() bzw rawurlencode()

0

Angenommen du hast für den Upload der Datei eine Variable (z.B.: $filename), kannst du vor dem eigentlichen Upload noch schreiben.

$newfilename = str_replace(' ', '_', $filename);

das ersetzt jedes Leerzeichen durch einen _

Hoffe ich konnte helfen ;)

PS: Musst halt dann mit $newfilename weiterarbeiten ;)

Woher ich das weiß:Berufserfahrung – Informationstechnologe und Freizeitnerd ;)
GoodQNextQx  19.01.2020, 21:29

In deinem Fall (wenn du das Script 1 zu 1 übernommen hast) kannst du auch das hier:

$target_file = $target_dir . basename($_FILES["fileToUpload"]["name"]);

so abändern:

$target_file_ori = $target_dir . basename($_FILES["fileToUpload"]["name"]);

$target_file = str_replace(' ', '_', $target_file_ori);

so musst du die Variable nicht überall anders abändern.

0
RakonDark  19.01.2020, 21:43
@GoodQNextQx

mehr als woraround ist das auch nicht und vermittelt dem lernenden ganz schlevhte lösungsansetze. lern doch einfach nicht dos denke. dazeinamen haben nun mal leerzeichen. also bring es ihm richtig bei .

0
GoodQNextQx  19.01.2020, 22:01
@RakonDark

@RakonDark verstehe ich jetzt nicht. Ist doch kein Workaround. Gilt ja für alle zukünftigen Uploads. Was würdest du denn in der Situation vorschlagen? Die User bitten keine Dateien mit Leerzeichen hochzuladen?

0

schrottscript. basename ist total falsch dadrinne.

das ist zwar zum üben aber total unnötig. such dir ein anderes und nicht von der seite.

GoodQNextQx  19.01.2020, 21:31

sehe deine Kommentare in dem Bereich öfter. Du kritisierst zwar, hilfreiches konnte ich jedoch bisher nicht entdecken.

Anstatt zu sagen "Schrottscript", könntest du ja eine bessere Lösung präsentieren.. oder?

0
RakonDark  19.01.2020, 21:39
@GoodQNextQx

bin leider unterwegs . ein script bricht nicht wegen leerzeichen ab. deswegen ist es schrott. und gibt ja google zum finden der anderen 1000 skripte. und nein ich kritisiere nicht unbegründet. also so wie du bin ich einfach nicht. du verteidigst schrott. svhrott funktioniert nämlich nur wenn diverse bedingungen vom anwender eingehalten werden. nennt man nun einmal schrott. kaputt disfunktional . nur in einem fall nutzbar, also vom programmierer selbst , der kennt sein schrott. bestimmt hab ich dich auch schonmal zurecht kritisiert. tut bestimmt eeh wenn man betroffen ist . pech für dich

0
GoodQNextQx  19.01.2020, 21:58
@RakonDark

Bitte nicht persönlich nehmen. Nein, bisher wurde ich von dir nicht kritisiert, würde mich aber auch nicht stören. Meinte ja nur, wenn du schon sagst es is ein Schrottskript, solltest du auch ne Alternative anbieten. Eine Aussage wie diese dient halt nicht der Lösung der Fragestellung. Kenne die Mentalität aber von Plattformen wie selfhtml oder stackoverflow. Nochmal.. war nicht persönlich gemeint, also chill.

0
RakonDark  20.01.2020, 00:10
@GoodQNextQx

so hier mal die erklärung warum das script schrott ist und niemand das so einsetzen sollte .

nein du entfernst nicht die leerzeichen , das ist zwar der richtig erkannte fehler , aber damit veränderst du ja den namen der datei , also unbrauchbar , weil du es auch nciht wiederherstellen kannst.

und nein man tauscht auch nicht gegen unterstriche , den dann hat man das problem bei namen mit unterstrichen das diese später fehlen wenn man diese wiederherstellen will .

einzig richtig ist das zu encoden , z.b. mit urlencode(string)

und dann wenn man fertig ist mit urldecode(string)

alle diese workarounds hier also ersetzen mit nichts oder unterstrichen machen nur anfänger die noch nie was real umsetzen mussten , bzw die dem anwender erstmal eine anleitung mitgeben müssen welche dateien wie benannt werden müssen damit das überhaupt funktioniert . Und eins ist doch wohl klar im jahre 2020 mus man dem User gar nichts mehr sagen , man macht es einfach richtig und denkt vorher nach .

und beim upload wird eh kein pfad mitgegeben , ein browser liefert keinen pfad das wäre ein sicherheitrisiko , deswegen ist basename totaler quatsch seit X Jahren , wir nehmen ja auch nicht php 4 .

also lass dir nix erzählen hier , mach es gleich richtig , so das es auch mit allem funktioniert und die original namen erhalten bleiben .

stell dir mal vor eine webseite würde dir erstmal bei datei auswahl einen error melden ... sorry die datei hat unterstriche , bitte ändern sie das oder sie verlieren die unterstriche

1