PHP动态链接生成:含空格文件名被截断的解决方法问询
解决包含空格的文件名拼接成HTML链接的问题
这个问题我之前也碰到过!核心原因有两个:
- HTML的属性值如果没有用引号包裹,浏览器会把空格识别为属性值的结束,所以你的链接只解析到了
Data就停下了 - 文件名里的空格属于URL中的特殊字符,直接放在链接里不符合URL规范,必须转成合法的编码形式
正确的解决方法
你需要做两件事:
- 给
href的属性值加上单引号或双引号,确保浏览器把整个路径当作一个完整的属性值 - 使用PHP的
urlencode()(或rawurlencode())函数对包含空格的文件名进行URL编码,把空格转换成%20
修改后的代码
$message=$row["message"]; $fileName=$row["filename"]; $date=$row["date"]; echo "<tr>"; echo "<td>".$Serial."</td>"; echo "<td>".$message."</td>"; // 这里是修改的核心:给href加单引号,并用urlencode处理文件名 echo "<td><a href='".$path.urlencode($fileName)."'>Download</a></td>"; echo "<td>".$date."</td>"; echo "</tr>"; $Serial++;
额外说明
urlencode()会把空格转成+,而rawurlencode()会转成%20,两者在大多数场景下都能正常工作,rawurlencode()更符合标准URL编码规范- 也可以用双引号包裹属性值,但要注意转义PHP里的双引号,比如:
echo "<td><a href=\"".$path.rawurlencode($fileName)."\">Download</a></td>";
内容的提问来源于stack exchange,提问作者Cool Compiler
相关产品推荐
相关产品推荐

