【问题标题】:PHP: safely transform a file name into an URLPHP:安全地将文件名转换为 URL
【发布时间】:2015-09-17 09:10:35
【问题描述】:

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

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

例如,我有一个包含 text 49% text.pdf 的文件,并且服务器响应 URL http://localhost/folder/text%2049%%20text.pdf 并出现 Bad Request 错误。

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

更新

urlencode() 返回我<a href="text+49%25+text.pdf">text 49% text.pdf</a>,这样我得到Bad Request 错误。

【问题讨论】:

  • 我认为如果您的服务器上有一个名为“text 49% text.pdf”的文件,这是一件坏事。您必须先重命名文件,然后才能将其保存在服务器上。因此,如果您上传“text é text.pdf”,例如将他的名字更改为“text_e_text.pdf”!它将防止那些 url 错误 ;)
  • 当我使用文件名来填充列表时,我避免了通常用于放置在服务器上的每个文件的下划线。我知道我可以逃避它们,但没有办法实现最初的要求吗? PS即使您的解决方案也会出现错误
  • 你不能避免文件名中的 % 符号吗??@vismark
  • @SubinThomas 这是文档标题的一部分,它必须以这种方式出现...我需要改进脚本,而不是避免困难/特殊情况
  • 我尝试了 urlencode() 并得到“test+49%25+test.pdf”。 @vismark

标签: php url url-rewriting urlencode scandir


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    text%2049%%20text.pdf 给你一个Bad Request 是正确的。 因为49% 应该编码为49%25

    结果链接应该是这样的: <a href="text%2049%25%20text.pdf"> text 49% text.pdf</a>

    我使用urlencode() 没有问题。

    对不起,没有发表评论,没有足够的积分。

    【讨论】:

    • 我知道 URL 中的百分比是用 %25 转义的,我可以手动完成,但没有像 urlencode() 这样的函数来逃避所有这些奇怪的情况,因为我可能没有预见到所有他们的?每次上传名称中带有特殊字符的新文件时,我无法检查它是否有效...
    • 别担心,但正如我在问题中所说,urlencode() 在这种情况下不起作用...
    猜你喜欢
    • 1970-01-01
    • 2014-01-04
    • 2012-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多