如何回应"%20"用于网址中的空格

时间:2014-12-01 18:26:25

标签: php html

我通过php脚本链接到有时会有空格的文件。所以我用%20替换空格的所有实例,然后回显链接的html。

但是我遇到了一个问题,它似乎只是忽略了%20并添加了一个空格。如果我手动输入%20的URL用于找到文件的空格。我尝试过使用" +"它确实显示在URL中,但是网址不起作用且找不到文件。

<?php $newfilename = str_replace(" ", "%20", $docs['filename']) ?>

<a href=http://<?php echo $_SERVER['HTTP_HOST']."/database/
candidates/".$newfilename;?>><"Filename"></a>

因此,如果文件名为&#34; test file.doc&#34;那么网址是&#34; mysite.com/database/candidates/test file.doc&#34; ...它会忽略%20。

如何使用名称中带空格的文件来处理此问题?

2 个答案:

答案 0 :(得分:2)

您应该使用内置函数rawurlencode(或密切相关的urlencode

$newfilename = rawurlencode($docs['filename']);

urlencode用于编码查询字符串参数,这可能在这里工作,因为你只有空格。但是,rawurlencode适用于URL的路径,这是您在示例中使用的路径。 (文档中给出的两个例子都说明了)

答案 1 :(得分:1)

您是否尝试过rawurlencode()

<a href=http://<?php echo $_SERVER['HTTP_HOST']."/database/candidates/".rawurlencode($newfilename);?>>
    <"Filename">
</a>

最好将整个网址作为参数:

<?php $url = rawurlencode("http://{$_SERVER['HTTP_HOST']}/database/candidates/$newfilename"); ?>

<a href="<?php echo $url;?>">
    <"Filename">
</a>