2013-10-22 28 views
0

我在我的网站上使用文件上传,我不明白为什么有些上传不能通过网络浏览器访问,我只能通过FTP客户端看到它们。哪些字符会破坏URL,并且URL的最大长度是多少?

我的PHP函数如下所示:

move_uploaded_file($fileTmpLoc, 'uploads/'.date('ymdGis').'-'.substr(str_shuffle(md5(time())),0,4).'-'.str_replace(' ', '-', $fileName)) 

当上传喜欢

屏幕在00年7月14日拍摄2013年10月22日AM.png

文件结果链接是

/up加载/ 131022172126-08cd-Screen-Shot-2013-10-22-at-7.13.18-AM.png

是文件的长度还是其他导致某些文件无法通过一个网页浏览器。

+1

你是什么意思的“无法访问”,你试图访问它时会得到什么错误? –

+0

你可能会发现这里有用的东西:http://stackoverflow.com/questions/2668854/sanitizing-strings-to-make-them-url-and-filename-safe –

+0

它可能是时期...其他的东西我'以前遇到过的都是大写字母。有很多不用去的字符可以避免......问号/斜线等等。虽然它在服务器类型之间似乎有所不同。 –

回答

0

RFC3986定义,下列字符的URL是有效的:

A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 
a b c d e f g h i j k l m n o p q r s t u v w x y z 
0 1 2 3 4 5 6 7 8 9 - _ . ~ 

下面的字符有着特殊的意义,因此被允许,但必须在某些地方进行转义。

! * ' () ; : @ & = + $ ,/? % # [ ] 

至于最大长度,这已经回答了很好的另一个问题是:What is the maximum length of a URL in different browsers?

+0

这并不能真正解决问题。他使用的所有角色都是完全有效的。但是,现在它确实回答了这个长度。 –

+0

考虑到他提供的信息,告诉他不是,这不是打破它的角色或长度。这显然是别的。 – Polynomial

+0

虽然RFC3986是URL的标准,但并不一定意味着服务器与该标准100%兼容。在过去,服务器对大写字母没有正确响应,我确实遇到过问题。它会上传文件,但如果它有大写字母,它将不允许从HTTP端访问它。这是我很久以前使用的旧的共享UNIX解决方案。最近我还没有遇到这样的问题 - 近年来情况似乎有所改善。 –

0

我询问现在

substr(str_shuffle(md5(time())),0,4) 

我呼应同样的事情,但没想到的是,随机字符将被再次再生,因此呼应断开链路觉得自己很傻。非常抱歉花时间。

感谢您的帮助。