Domanda

stati alle prese con la sostituzione di una barra rovesciata da un altro simbolo come '.-.' solo per indicare la posizione di backslash come non ho potuto inviare una stringa come 'C \ xampp \ etc.' tramite URL, GET variabile in modo ho pensato di sostituire innanzitutto la backslash in quella stringa da un altro simbolo, quindi inviare tramite URL, e quindi sostituirli nuovo al backslash nel file PHP che gestisce. Anche se ci sarebbe un modo migliore per inviare tali stringhe tramite url? Perché quando provo uno script come ad esempio:

$tmp_name = preg_replace("\", ".-.", $_FILES['uploadfile']['tmp_name']);

Si scopre in un errore di PHP come è anche usato \ come delimitatore ..

Qualcuno mi potrebbe aiutare su questo?

Grazie in anticipo!

A proposito, se sarei stato in grado di inviare una gamma completa tramite url, l'intero problema sarebbe risolto, ma non credo che sia possibile?

È stato utile?

Soluzione

L'espressione regolare utilizzata in preg_replace dovrebbe essere racchiuso in un paio di delimitatore e anche provare utilizzando \\\ invece di \ come:

$tmp_name = preg_replace("{\\\}", ".-.", $_FILES['uploadfile']['tmp_name']);

Modifica

Per invertire la sostituzione si può fare:

$str = preg_replace('{\.-\.}',"\\",$str);

È necessario sfuggire alla . per abbinare un punto letterale.

Altri suggerimenti

uso urlencode() / urldecode().

echo urlencode('C:\xampp\etc'); // C%3A%5Cxampp%5Cetc

A proposito: Questo suona come un enorme falla di sicurezza (l'invio di percorsi assoluti su richiesta)


PS: preg_replace() è per le espressioni regolari. Prova str_replace() prossima volta.

  

A proposito, se sarei stato in grado di inviare una gamma completa tramite url, l'intero problema sarebbe risolto, ma non credo che sia possibile?

E 'facile. PHP:

$url = 'http://example.com/?array=' . urlencode(serialize($array)); // html
$array = unserialize($_GET['array']); // server side

o JavaScript:

url = "http://example.com/?array=" + encodeURIComponent(JSON.stringify(array)); // client
$array = json_decode($_GET['array']); // server

(per Javascript dovrete guardare in alto se encodeURIComponent è corretta, ed è necessario la libreria ufficiale JSON e)

Se non si utilizza un'espressione regolare (che non sei), è necessario utilizzare str_replace invece:

$tmp_name = str_replace('\\', '.-.', $_FILES['...']);

Si noti che si deve sfuggire alla \ con un altro \ (altrimenti si sarebbe sfuggire la seguente ').

Per quanto riguarda l'errore delimitatore - espressioni regolari devono essere racchiuse in delimitatori, ad esempio /foo/ (/ è il delimitatore, foo è il modello). Ma, ancora una volta, non c'è bisogno per l'uso o preoccuparsi di espressioni regolari

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top