Ersetzen Backslash mit einem anderen Symbol in PHP
Frage
zu kämpfen mit einem Schrägstrich durch ein anderes Symbol wie Ersetzen ‚.-.‘ nur um die Position der Schrägstriche angeben, da ich nicht eine Zeichenfolge wie senden könnte ‚C \ xampp \ etc.‘ durch url als GET-Variable so dass ich dachte, dass ich zuerst die Schrägstriche in dieser Zeichenfolge durch ein anderes Symbol ersetzen würde, dann durch url senden, und sie dann in Schrägstrichen in der PHP-Datei, dass Griffe ersetzen zurück. Obwohl wäre es eine bessere Art und Weise sein, wie Strings durch URL zu schicken? Weil, wenn ich versuche, ein Skript wie:
$tmp_name = preg_replace("\", ".-.", $_FILES['uploadfile']['tmp_name']);
Es verwandelt sich in einen PHP-Fehler, wie \ auch als Trennzeichen verwendet wird ..
Könnte mir jemand helfen auf diese aus?
Vielen Dank im Voraus!
Btw, wenn ich in der Lage sein würde eine vollständige Palette URL zu senden, das ganze Problem gelöst werden würde, aber ich glaube nicht, es ist möglich?
Lösung
Die Regex in preg_replace verwendet werden, sollten in einem Paar von Trennzeichen eingeschlossen werden und auch anstelle von \\\
mit \
Versuchen Sie, wie:
$tmp_name = preg_replace("{\\\}", ".-.", $_FILES['uploadfile']['tmp_name']);
EDIT:
die Substitution umkehren Sie tun können:
$str = preg_replace('{\.-\.}',"\\",$str);
Sie müssen die .
entkommen einen wörtlichen Punkt entsprechen.
Andere Tipps
Verwendung urlencode()
/ urldecode()
.
echo urlencode('C:\xampp\etc'); // C%3A%5Cxampp%5Cetc
BTW: Das klingt wie eine große Sicherheitslücke (Senden absolute Pfade auf Anfrage)
PS: preg_replace()
für regulären Ausdrücke ist. Versuchen str_replace()
beim nächsten Mal.
Btw, wenn ich in der Lage sein würde eine vollständige Palette URL zu senden, das ganze Problem gelöst werden würde, aber ich glaube nicht, es ist möglich?
Das ist einfach. PHP:
$url = 'http://example.com/?array=' . urlencode(serialize($array)); // html
$array = unserialize($_GET['array']); // server side
oder Javascript:
url = "http://example.com/?array=" + encodeURIComponent(JSON.stringify(array)); // client
$array = json_decode($_GET['array']); // server
(für Javascript Sie suchen müssen bis ob encodeURIComponent korrekt ist, und Sie müssen die offizielle JSON-Bibliothek als auch)
Wenn Sie nicht einen regulären Ausdruck (was du bist nicht), sollten Sie str_replace
verwenden stattdessen:
$tmp_name = str_replace('\\', '.-.', $_FILES['...']);
Beachten Sie, dass Sie die \
mit einem anderen \
zu entkommen (sonst würde es die folgenden '
entkommen).
Wie für die Begrenzungsfehler - reguläre Ausdrücke müssen eingeschlossen in Trennzeichen werden, zum Beispiel /foo/
(/
ist das Trennzeichen, foo
das Muster ist). Aber auch hier gibt es keine Notwendigkeit für Sie zu nutzen oder sich Sorgen über regexps