$_FILES['datei']['name'] mit str_replace ändern, funktioniert nicht.

B

ba2

Guest
Hi,

ich möchte einen Dateinamen von Umlauten entfernen, dafür nutze ich folgendes Skript, Wenn ich $_FILES['datei']['name'] druch z.B. "öäü" ersetze funktioniert es auch nur in der jetzigen Konstellation leider nicht.
PHP:
<?php
$dname = $_FILES['datei']['name'];
$dname = str_replace("ä", "ae", $dname);
$dname = str_replace("Ä", "Ae", $dname);
$dname = str_replace("ö", "oe", $dname);
$dname = str_replace("Ö", "Oe", $dname);
$dname = str_replace("ü", "ue", $dname);
$dname = str_replace("Ü", "Ue", $dname);
$dname = str_replace("ß", "ss", $dname);
?>

Woran kann das liegen?
 
Probier mal VARIABLE= ereg_replace("SUCHSTRING", "ERSATZSTRING", VARIABLE)

Ich glaub bei str_replace war irgendein Haken, der dafür sorgt, dass das anders arbeitet, als man annimmt. :D

lg

Brabax
 
Das Funktioniert leider auch nicht,
wie gesagt wenn ich z.B. $_FILES['datei']['name'] durch "öööääü" ersetze, funktioniert das ganze wunderbar, also muss das ja mit $_FILES['datei']['name'] zusammenhängen, aber inwiefern $_FILES['datei']['name'] anders in seiner Beschaffenheit als "öööääü" ist, ist mir unklar.
 
[EDIT]: sorry, beim ersten mal zu schnell gelesen und nur die Hälfte mitgenommen :) [/EDIT]

Wenn du beide Variablen mal echo'est, gibt es dann einen Unterschied?
 
Nein,

was mir gerade durch den Kopf geht, ist $_FILES['datei']['name'] eventuell kein String(Vom Variable Type) und kann deswegen nicht bearbeiten werden?

EDIT: naja laut gettype($_FILES['datei']['name']); ist es ein string, komisch, ich verstehe es nicht.
 
Eigentlich nicht, aber das kannst du ganz einfach testen, indem du

Code:
$dname = (string) $_FILES['datei']['name'];

verwendest.

EDIT: jetzt warst du zu schnell :D Geht es denn, wenn du andere Zeichen ersetzt?
 
Nein,

EDIT: hab es auch so versucht:
$dname = "".$_FILES['datei']['name']."";

geht auch nicht. :D
 
Hmpf...kniffelig. Ein Workarround wäre sowas:

Code:
$dname = $_FILES['datei']['name'];
$dname = str_replace("ä", "ae", $_FILES['datei']['name']);
$dname = str_replace("Ä", "Ae", $dname);
$dname = str_replace("ö", "oe", $dname);
$dname = str_replace("Ö", "Oe", $dname);
$dname = str_replace("ü", "ue", $dname);
$dname = str_replace("Ü", "Ue", $dname);
$dname = str_replace("ß", "ss", $dname);

oder vllt.

Code:
$dname = $_FILES['datei']['name'];
$dname = (string) $dname;
$dname = str_replace("ä", "ae", $dname);
$dname = str_replace("Ä", "Ae", $dname);
$dname = str_replace("ö", "oe", $dname);
$dname = str_replace("Ö", "Oe", $dname);
$dname = str_replace("ü", "ue", $dname);
$dname = str_replace("Ü", "Ue", $dname);
$dname = str_replace("ß", "ss", $dname);

Oder eben erst alles ersetzen und dann in $dname speichern.

Ich würde noch tippen, dass PHP wegen der Umlaute meckert, weil es halt keine Standard-Zeichen sind... aber das würde dann ja auch die anderen Tests aushebeln.

ist ['name'] denn auch richtig? Muss das nicht ['tmp_name'] sein? *alles durcheinander werf bis was gescheites rauskommt*?
 
ja name ist richtig, die variable wird ja ausgegeben also die "bearbeite" $dname aber es sein keine Änderungen ausgeführt worden.

EDIT:

Sinn gemäß ist der code so

PHP:
<form action="?upload" method="post" enctype="multipart/form-data">
<input type="file" name="datei"><br>
<input type="submit" value="Hochladen">
</form>
<?php

	if (isset($_GET["upload"]))
	{
		$dname = $_FILES['datei']['name'];
		$dname = ereg_replace("ä", "ae", $dname);
		$dname = ereg_replace("Ä", "Ae", $dname);
		$dname = ereg_replace("ö", "oe", $dname);
		$dname = ereg_replace("Ö", "Oe", $dname);
		$dname = ereg_replace("ü", "ue", $dname);
		$dname = ereg_replace("Ü", "Ue", $dname);
		$dname = ereg_replace("ß", "ss", $dname);

	echo $dname;
	}
?>
 
Was sagt denn folgendes:

(Datei mit "ä" im Namen hochladen!)

Code:
$dname = $_FILES['datei']['name'];

$firstpos1 = strpos($_FILES['datei']['name'], "ä");
$firstpos1 = strpos($dname, "ä");

echo $firstpos1." : ".$firstpos2;

EDIT: Die if sprint auch 100%ig an? mach mal bitte im form action="upload=test", wenn nicht.
 
doch es arbeitet, ich bekomme den text ja ausgegeben also befindet sich php in der IF Abfrage

PHP:
<form action="?upload" method="post" enctype="multipart/form-data">
<input type="file" name="datei"><br>
<input type="submit" value="Hochladen">
</form>
<?php

	if (isset($_GET["upload"]))
	{
		$dname = $_FILES['datei']['name'];
		$dname = ereg_replace("ä", "ae", $dname);
		$dname = ereg_replace("Ä", "Ae", $dname);
		$dname = ereg_replace("ö", "oe", $dname);
		$dname = ereg_replace("Ö", "Oe", $dname);
		$dname = ereg_replace("ü", "ue", $dname);
		$dname = ereg_replace("Ü", "Ue", $dname);
		$dname = ereg_replace("ß", "ss", $dname);

$firstpos1 = strpos($_FILES['datei']['name'], "ä");
$firstpos2 = strpos($dname, "ä");

echo $firstpos1." : ".$firstpos2;

	}
?>

so bekomme ich nur einen Doppelpunkt.
 
YEAH ich hab das Problem gelöst:

der Fehler ist an ner ganz anderen stelle unzwar:

Der Doctype stand auf: iso-8859-1 ich habe ihn auf UTF-8 geändert und siehe da es geht, lol
 
D.h. __theoretisch__, dass $_FILES nichts enthält (also keine "ä") und dies entsprechend an die dname weitergibt.

Da scheint ganz generell was nicht zu passen mit der $_FILES oder sie ist nicht übertragbar. Da weisz ich leider nicht weiter.
 
13 Sekunden vor deinen Thread hab ich gepostet, das ich es hin bekommen habe ^^

EDIT: Danke für deine Hilfe
 
autsch... das war der Fehler? :-D Fieses Ding, da muss man erstmal drauf kommen. Dann war wenigstens meine Spekulation oben nicht ganz so abwegig, wie ich dachte :D
Muss ich mir für die Zukunft merken.

Freut mich, dass es läuft :)
 
Nur noch eine kleine Anmerkung:
Vorsicht mit der Verwendung von ereg_replace(). Früher oder später wirst du damit Probleme bekommen, denn die Funktion ist als "deprecated" eingestuft und wird es ab PHP 6 nicht mehr geben! (Bereits ab PHP 5.3 gibt es eine hässliche "E_DEPRECATED" Meldung)
Es wird empfohlen statt dessen preg_replace() zu verwenden.
 
PHP 6? ... man und ich hab gerade erst akzeptiert, dass es 5 gibt.

Aber danke für die Info... da muss ich gleich morgen ein paar Scripte ändern, bevor die Hoster auf blöde Ideen kommen und auf 5 bzw irgendwann mal auf 6 gehen :)

Danke und lG

Brabax
 
Zurück
Oben