2011-06-12 88 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

相关问题