Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/231.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP:安全地将文件名转换为URL_Php_Url_Url Rewriting_Urlencode_Scandir - Fatal编程技术网

PHP:安全地将文件名转换为URL

PHP:安全地将文件名转换为URL,php,url,url-rewriting,urlencode,scandir,Php,Url,Url Rewriting,Urlencode,Scandir,我编写了一个PHP脚本,它扫描一个目录中的pdf文件,然后创建一个包含这些文件及其相关链接的HTML页面。文件名将用于列表项 如何确保特殊字符和URL之间的良好兼容性 例如,我有一个文件包含text 49%text.pdf,服务器正在响应URLhttp://localhost/folder/text%2049%%20text.pdf请求不正确错误 我尝试使用urlencode(),但没有成功。如何改进我的脚本 更新 urlencode()返回我,我得到错误请求错误。text%2049%%20te

我编写了一个PHP脚本,它扫描一个目录中的pdf文件,然后创建一个包含这些文件及其相关链接的HTML页面。文件名将用于列表项

如何确保特殊字符和URL之间的良好兼容性

例如,我有一个文件包含
text 49%text.pdf
,服务器正在响应URL
http://localhost/folder/text%2049%%20text.pdf
请求不正确错误

我尝试使用
urlencode()
,但没有成功。如何改进我的脚本

更新


urlencode()
返回我
,我得到
错误请求
错误。

text%2049%%20text.pdf
给你一个
错误请求
是正确的。
因为
49%
应编码为
49%25

结果链接应如下所示:

我使用
urlencode()
进行此操作,没有问题


抱歉,没有作为评论发布,没有足够的要点。

您必须使用
rawurlencode()
。这会将%转换为%25,将空格转换为%20

我认为,如果服务器上有一个名为“text 49%text.pdf”的文件,这是一件坏事。在将文件保存到服务器上之前,必须重命名该文件。所以,如果你上传“textétext.pdf”,比如用“text_e_text.pdf”更改他的名字!它将防止这些url错误;)当我使用文件名来填充列表时,我避免了在服务器上放置的每个文件通常使用的下划线。我知道我可以摆脱他们,但有没有办法达到最初的要求?PS该错误甚至与您的解决方案一起出现。您不能避免文件名中的%符号吗@vismark@SubinThomas这是文档标题的一部分,它必须以这种方式出现……我需要改进脚本,而不是避免困难/特殊情况。我尝试了urlencode()并获得了“test+49%25+test.pdf”@Vismark我知道URL中的百分比是用
%25
转义的,我可以手动进行转义,但是有没有像
urlencode()
这样的函数来转义所有这些奇怪的情况,因为我可能没有预见到所有这些情况?我无法在每次上载新文件时检查它是否有效,文件名中有一个特殊字符…不要担心,但正如我在问题中所说,
urlencode()
在这种情况下不起作用。。。