2010-03-20 72 views
3

一直在用另一個符號替換反斜槓,例如「.-」。只是爲了表示反斜槓的位置,因爲我無法發送字符串,如'C \ xampp \ etc'。通過url作爲GET變量,所以我想我會先用另一個符號替換該字符串中的反斜槓,然後通過url發送,然後將它們替換回處理它的PHP文件中的反斜槓。雖然有沒有更好的方式通過url發送這樣的字符串?因爲當我嘗試腳本,例如:用PHP中的另一個符號替換反斜槓

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

原來到一個PHP錯誤的\也用作分隔符..

誰能幫我這個?

在此先感謝!

順便說一句,如果我能夠通過url發送一個完整的數組,這個問題就可以解決,但我認爲這不可能?

回答

4

在preg_replace函數中使用的正則表達式應包含在一對分隔符,並且還嘗試使用\\\代替\爲:

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

編輯:

要反轉可以執行替代:

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

您需要轉義.以匹配一個字面點。

+0

真棒!這完全解決了我的問題,非常感謝! – Skyfe 2010-03-20 10:40:46

+0

更新:我將如何扭轉這種情況? – Skyfe 2010-03-20 10:42:38

+0

@Skyfe:更新了答案。 – codaddict 2010-03-20 10:47:42

3

使用urlencode()/urldecode()

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

順便說一句:這聽起來像一個巨大的安全漏洞(由請求發送絕對路徑)


PS:preg_replace()爲正則表達式。下次嘗試str_replace()

+0

+1正確答案,恕我直言。 – 2010-03-20 10:42:44

0

如果你不使用正則表達式(你不是),你應該使用str_replace代替:

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

注意,您必須逃脫\與另一\(否則它會逃脫以下')。

至於分隔符錯誤 - 正則表達式需要用分度符括起來,例如/foo//是分隔符,foo是模式)。但同樣,也沒有必要爲你使用也不用擔心正則表達式

1

順便說一句,如果我能夠通過URL來發送一個完整的陣列,這整個問題將得到解決,但我不認爲這是可能的?

這很簡單。PHP:

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

或JavaScript:

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

(爲Javascript你要查找encodeURIComponent方法是否正確,你需要官方JSON庫以及)