2011-06-12 80 views
0

在我的服務器上有一個文件。文件名是ken\'s book.doc在我的服務器上有一個文件,我想訪問php

但在我的數據庫,它被存儲爲ken's book.doc

(我有固定的反斜線問題,但仍無法訪問的問題上服務器之前上傳的文件。

我使用和addslashes來添加反斜槓,但它顯示爲:ken/'s book.doc(即一個斜槓,而不是反斜槓

我用:

str_replace("'", "\'", $filename); 

但它顯示爲正斜槓。

我該如何解決這個問題?

感謝

編輯

額外的信息:我使用的是新值作爲鏈接的一部分。那就是:

<a href="<?php echo str_replace("'", "\'", $filename);?>">View</a> 
+0

您使用的是哪種平臺和PHP版本? – rzetterberg 2011-06-12 19:33:15

+1

文件名是'「ken \'book.doc」'?我以某種方式懷疑這一點。對我來說沒有意義。 – Tomalak 2011-06-12 19:33:18

+0

是的,原來的文件名是ken的book.doc,它似乎有魔術引號,它添加了斜槓 – 2011-06-12 19:50:26

回答

1

如果你有一個在磁盤上包含反斜槓的文件名,我會先修復它。當把這個文件名存入數據庫時​​,你的第二個問題顯然沒有使用mysql_real_escape_string(爲什麼它在那裏沒有反斜線)。

addslashes btw不會自動添加正斜槓。你故事的這一部分是不真實的。再次將其刪除,您不需要撥打奇怪的str_replace,而只需撥打stripslashes

實際的問題(編輯後)原來是一個html鏈接。這僅僅是因爲瀏覽器有在網址中將反斜槓變成正斜槓的習慣。防止應用urlencode()

<a href="<?=urlencode(stripslashes($filename));?>">View</a> 
+0

我認爲從數據庫中檢索數據時會刪除以前添加的斜線。我使用addslashes,所以我可以在磁盤上具有相同的文件名。它確實添加了斜線,但實際問題是您在最後一段中指出的內容 – 2011-06-12 20:19:52

+0

數據庫不會在檢索時刪除反斜槓*。插入時發生這種情況。爲了將數據插入數據庫,需要正確地轉義數據。 – mario 2011-06-12 20:23:23

+0

urlencode不能解決我的問題。它增加了更多有趣的角色。請問是他們的其他選擇嗎? – 2011-06-12 20:23:44

相關問題