href语法:文件名中有空格是否可以?

56

我的惯例是,每当我使用图片时,我都会给它们命名,比如 walls_icobu_hover

因此,当我设置路径时,它们看起来像这样:

<img src="images/walls_ico.ico" />
<img src="buttons/bu_hover.png" />

直到现在,我正在处理一个用户上传文件的项目...

我在想,文件和文件夹名称之间是否可以有空格,例如

<img src="buttons/bu hover.png" />

2
相关:在URL中,空格应该使用%20还是+进行编码? - DavidRR
4个回答

73

src属性应包含一个有效的URL。由于URL中不允许使用空格字符,因此您需要对它们进行编码

您可以写成:

<img src="buttons/bu%20hover.png" />

不是:

<img src="buttons/bu+hover.png" />

正如DavidRR在评论中正确指出的那样,将空格字符编码为+仅在URL的查询字符串部分有效,而不在路径本身。


2
基本上只需要对src进行URL编码,如果您正在使用PHP,请使用:http://php.net/manual/en/function.urlencode.php - Bjarke Freund-Hansen
我知道在核实事实之前应该先发表我的答案...=/由于我几乎说了同样的话,所以我删除了我的答案。您的速度加一,先生!=b - David Thomas
1
注意:我检查的XHTML Transitional文件中,W3C标记验证服务没有标记包含空格的a/@href值的出现。 - DavidRR
3
我不相信src="buttons/bu+hover.png"是有效的。根据这个答案这个答案,在URL中只有在查询字符串部分,将空格编码为+才是有效的。此外,在我刚刚进行的测试中,当我尝试访问文件名中的空格被(不适当地)编码为+字符时,IE和Firefox都返回404错误。 - DavidRR
1
但是它说这只适用于域名。在src中有空格应该没问题。 - qfactor77

5

引用HTML5支持Frederic的观点,即不允许使用空格:

http://www.w3.org/TR/html5/links.html#attr-hyperlink-href

a和area元素上的href属性必须具有一个值,该值是一个可能被空格包围的有效URL。

“有效URL”的定义指向:http://url.spec.whatwg.org,该网站定义了URL代码点https://url.spec.whatwg.org/#url-code-points

URL代码点是ASCII字母数字字符、“!”, “$”, "&", "'", "(", ")", "*", "+", ",", "-", ".", "/", ":", ";", "=", "?", "@", "_", "~", 以及范围在U+00A0至U+D7FF、U+E000至U+FDCF、U+FDF0至U+FFFD、U+10000至U+1FFFD、U+20000至U+2FFFD、U+30000至U+3FFFD、U+40000至U+4FFFD、U+50000至U+5FFFD、U+60000至U+6FFFD、U+70000至U+7FFFD、U+80000至U+8FFFD、U+90000至U+9FFFD、U+A0000至U+AFFFD、U+B0000至U+BFFFD、U+C0000至U+CFFFD、U+D0000至U+DFFFD、U+E1000至U+EFFFD、U+F0000至U+FFFFD、U+100000至U+10FFFD的代码点。

然后规范在解析算法的各个部分使用“URL代码点”这个术语:

如果c不是EOF代码点,也不是URL代码点,且不是“%”,则解析错误。

对于方案、授权、相对路径、查询状态和片段状态:整个URL都要用到URL代码点。


3

如果您正在使用PHP

请查找以下代码

$result = mysqli_query($con,$sql);
    //echo $ip."<br />";REGEXP
    //echo $name."<br />";
    echo "<table border=2px style='border-radius=20px;' align=center><tr>
    <th>Document ID</th>
    <th>Document Name Type</th>
    <th>Download Documents</th>
    </tr>";//<th>Project Document Type</th>
    while($row = mysqli_fetch_array($result)) {
        $path1=$row['FOLDERNAME'] .'/'. $row['FILENAME'] .'.'. $row['DOCTYPE'];
        $path=str_replace(" ", '%20', $path1);
        echo "<tr>";
        echo "<td>" . $row['DocID'] . "</td>";
       // echo "<td>" . $row['PROJDOCTYPE'] . "</td>";Thank you. Your Apple ID is now ready for use.
        echo "<td>" . $row['DOCNAME'] . "</td>";
        echo '<td><a href=Tender/'.$path.'>'.$row['DOCNAME'].'</a></td>';
        echo "</tr>";
    }
    echo "</table>";

    mysqli_close($con);

-3
<body>
<img src="file:///C|/Documents and Settings/All Users/Documents/My Pictures/Sample Pictures/Water lilies.jpg"
</body>

只有在本地主机上工作时才允许使用空格


4
它们实际上是不被允许的,可能在某些情况下可以使用,但会因浏览器和文档类型的不同而出现错误。 - Tobu

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接