在我的服务器上有一个文件,我想访问php
在我的服务器上有一个文件。文件名是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>
如果你有一个在磁盘上包含反斜杠的文件名,我会先修复它。当把这个文件名存入数据库时,你的第二个问题显然没有使用mysql_real_escape_string
(为什么它在那里没有反斜线)。
addslashes
btw不会自动添加正斜杠。你故事的这一部分是不真实的。再次将其删除,您不需要拨打奇怪的str_replace
,而只需拨打stripslashes
。
实际的问题(编辑后)原来是一个html链接。这仅仅是因为浏览器有在网址中将反斜杠变成正斜杠的习惯。防止应用urlencode()
<a href="<?=urlencode(stripslashes($filename));?>">View</a>
我认为从数据库中检索数据时会删除以前添加的斜线。我使用addslashes,所以我可以在磁盘上具有相同的文件名。它确实添加了斜线,但实际问题是您在最后一段中指出的内容 – 2011-06-12 20:19:52
数据库不会在检索时删除反斜杠*。插入时发生这种情况。为了将数据插入数据库,需要正确地转义数据。 – mario 2011-06-12 20:23:23
urlencode不能解决我的问题。它增加了更多有趣的角色。请问是他们的其他选择吗? – 2011-06-12 20:23:44
您使用的是哪种平台和PHP版本? – rzetterberg 2011-06-12 19:33:15
文件名是'“ken \'book.doc”'?我以某种方式怀疑这一点。对我来说没有意义。 – Tomalak 2011-06-12 19:33:18
是的,原来的文件名是ken的book.doc,它似乎有魔术引号,它添加了斜杠 – 2011-06-12 19:50:26