PHP başka bir sembol ile ters eğik çizgi değiştirilmesi

4 Cevap php

Gibi başka bir sembol ile bir ters eğik çizgi yerine mücadele edilmiştir '-..' Böyle 'C \ xampp \ vs' gibi bir dize göndermek olamazdı olarak sadece tersbölülerden konumunu belirtmek için url üzerinden GET değişkeni olarak bu yüzden ben ilk, başka bir sembol ile bu dizede ters eğik çizgi yerine daha sonra url yoluyla göndermek ve ardından kolları PHP dosyası geri tersbölülerden onları değiştirin düşündüm. Rağmen url aracılığıyla bu dizeleri göndermek için daha iyi bir yol olurdu? Ben gibi bir komut dosyası çalıştığınızda Çünkü:

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

\ De sınırlayıcı olarak kullanılır gibi bir php hata içine çıkıyor ..

Herkes bu konuda bana yardımcı olabilir mi?

Teşekkürler gelişmiş!

Ben url üzerinden tam bir dizi göndermek mümkün olurdu varsa Btw, bütün bu sorun çözülmüş olurdu, ama bunun mümkün olduğunu sanmıyorum?

4 Cevap

Preg_replace kullanılan regex sınırlayıcı bir çift içine ve aynı zamanda \\\ yerine \ olarak kullanmayı deneyin alınmalıdır:

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

EDIT:

Yapabileceğiniz ikame ters çevirmek için:

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

Değişmez bir nokta maç için . kaçmak gerekir.

kullanmak urlencode() / urldecode().

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

BTW: Bu (istek mutlak yollarını gönderme) büyük bir güvenlik kusur gibi geliyor


PS: preg_replace() düzenli ifadeler içindir. str_replace() dahaki sefere deneyin.

Ben url üzerinden tam bir dizi göndermek mümkün olurdu varsa Btw, bütün bu sorun çözülmüş olurdu, ama bunun mümkün olduğunu sanmıyorum?

Bu kolay. PHP:

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

Veya Javascript:

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

(Javascript için size encodeURIComponent doğru olup olmadığını bakmak gerekir, ve siz de resmi json kitaplık gerekir)

Normal bir ifade (sen değilsin ki) kullanarak değilseniz, bunun yerine str_replace kullanmanız gerekir:

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

Başka \ ile \ kaçmak zorunda unutmayın (aksi takdirde aşağıdaki kaçmak istiyorum ').

Sınırlayıcı hata olarak - düzenli ifadeler, örneğin /foo/, delimeters içine alınması gerekir (/ ayırıcısını, foo desen). Fakat, yine, kullanmak veya regexplerde endişelenmenize gerek yok