我有这个代码,它列出了目录中所有的mp3链接,但是音频播放器不会播放文件名中有空格的任何文件,如果我删除空格,它可以工作,但我想知道当文件名中有空格时,如何让脚本添加%20,这样我使用的音频播放器就可以拾取它
谢谢!
下面是我的代码
<ul id="playlist">
<?php
$dirFiles = array();
// opens images folder
if ($handle = opendir('.')) {
while (false !== ($file = readdir($handle))) {
// strips files extensions
$crap = array(".jpg", ".jpeg", ".JPG", ".JPEG", ".png", ".PNG", ".gif", ".GIF", ".bmp", ".BMP", "_", "-", "error_log", ".php");
$newstring = str_replace($crap, " ", $file );
//asort($file, SORT_NUMERIC); - doesnt work :(
// hides folders, writes out ul of images and thumbnails from two folders
if ($file != "." && $file != ".." && $file != "index.php" && $file != ".DS_Store" && $file != "download.php" && $file != "error_log" && $file != "Thumbnails") {
$dirFiles[] = $file;
}
}
closedir($handle);
}
sort($dirFiles);
foreach($dirFiles as $file)
{
//echo "<li><img style=\"padding-right: 10px;vertical-align: middle;height: 60px;\" src=\"http://www.ggcc.tv/LogoNE.png\" />";
echo '<li><a href="'.$file.'">'.$file.'<br></li>';
}
?>
</ul>发布于 2014-12-14 06:52:20
尝试使用rawurlencode或其他Url函数
echo '<li><a href="'.rawurlencode($file).'">'.$file.'<br></li>';发布于 2014-12-14 06:45:45
使用str_replace将空格替换为%20。
$fileURL = str_replace(' ', '%20', $file);
echo '<li><a href="'.$fileURL.'">'.$file.'<br></li>';发布于 2014-12-14 07:20:47
或者,可以修改foreach循环,如下所示:
foreach($dirFiles as $file)
{
$url = join("%20",explode(' ',$file ) );
echo '<li><a href="'.$url.'">'.$file.'<br></li>';
}第一条语句只对空格进行编码,并分配结果供标记的HREF属性稍后使用。rawurlencode是实现类似结果的另一种选择,但它也可能编码更多的空格字符,这有时是好的,而其他时间可能会导致不希望的效果,例如编码作为域名一部分的字符。str_replace可能是更时髦的解决方案,因为它只需要一个函数调用,而不是这个代码片段中显示的两个函数调用。
PHP的TIMTOWDI方面在这个问题上尤为明显。您还可以执行以下操作:
<?php
$from = ' ';
$to = '+';
foreach($dirFiles as $file)
{
$url = strtr( $file, $to, $from);
echo '<li><a href="'.$url.'">'.$file.'<br></li>';
}在这个解决方案中,空格的替换字符是简单的'+‘(PHP编码空格的方式),它使用strtr(),有些人认为它比str_replace()更快。在浏览器自动解码url后,任何'+‘字符都将恢复为空格。
https://stackoverflow.com/questions/27464412
复制相似问题