我正在开发一个小项目,为网络界面提供一些音频数据。 我正在用PHP阅读现有文件夹的内容。
这是我的PHP代码:
<?php
$mp3folder = 'mp3/';
$oggfolder = 'ogg/';
$mp3files = glob($mp3folder.'*.mp3');
$oggfiles = glob($oggfolder.'*.ogg');
echo '
<script type="text/javascript">
$(document).ready(function(){
new jPlayerPlaylist({
jPlayer: "#jquery_jplayer_1",
cssSelectorAncestor: "#jp_container_1"
}, [';
for ($i=0; $i<count($mp3files); $i++) {
$namerr[$i] = substr($oggfiles[$i],strlen($oggfolder),strpos($oggfiles[$i], '.')-strlen($oggfolder));
echo '{'."\n";
echo 'title:"'.$namerr[$i].'",'."\n";
echo 'mp3:"'.$mp3files[$i].'",'."\n";
echo 'ogg:"'.$oggfiles[$i].'"'."\n";
echo '},'."\n";
}
echo '
], {
swfPath: "../../_res/jplayer",
supplied: "ogg, mp3",
wmode: "window",
smoothPlayBar: true,
keyEnabled: true
});
});
</script>';
?>
我的目录结构如下:
AUDIO
-> index.php
-> OGG
-> SONG#1.ogg
-> SONG#n.ogg
-> SONG FUN. ogg
-> MP3
-> SONG#1.mp3
-> SONG#n.mp3
-> SONG FUN.mp3
上面的php代码成功读取音频文件并构建一个列表,因此jPlayer可以读取它们并显示播放列表。
问题是:当文件名包含“#”符号时,jPlayer将无法读取音频文件。
当我尝试播放“SONG#1.mp3”然后查看Chromium中的调试器时,它显示“File SONG”未找到,而它通常会输出类似“File'SON FUN.mp3'成功读取”的内容。
所以我的结论是PHP在读取包含“#”的文件名时遇到了一些问题。
或者jPlayer可能会成为问题吗?
顺便说一句:这是我的第一个PHP项目,所以如果有很多错误请放纵。我确信有不同的,更好的方法来解决这个问题。但我是学习者。问候!
答案 0 :(得分:0)
jPlayer我是一个基于jquery的应用程序。它将您输出的文件名视为实际URL。在URL的情况下,hashtag表示不是文件名的一部分的本地ID。例如http://www.example.com/dir/file#id只返回“file”作为文件名,不包括#id!
所以你可以通过两种方式看待你的问题:
由于您无法更改URL的定义方式,因此您必须更改文件名,而不是包含主题标签。
答案 1 :(得分:0)
感谢所有帮助过我的人!特别感谢@Wrikken
我想我终于明白了:
当我使用urlencode()
将URL转换为正确的形式时,我遇到的问题是空格转换为+
符号,应该转换为%20
。
这是 - 据我所知 - 主要是因为urlencode()
用于查询,所以像index.php?search=Hello+World
这样的事情。
解决方案是使用rawurlencode()
代替。
因此,现在所讨论的部分代码如下所示:
for ($i=0; $i<count($mp3files); $i++) {
$namerr[$i] = substr($oggfiles[$i],strlen($oggfolder),strpos($oggfiles[$i], '.')-strlen($oggfolder));
echo '{'."\n";
echo 'title:"'.$namerr[$i].'",'."\n";
echo 'mp3:"'.dirname($mp3files[$i]).'/'.rawurlencode(basename($mp3files[$i])).'",'."\n";
echo 'ogg:"'.dirname($oggfiles[$i]).'/'.rawurlencode(basename($oggfiles[$i])).'",'."\n";
echo '},'."\n";
}
感谢所有好评!