[請益] 處裡檔案中的字串
各位好,不知道這個標題下得好不好
但是,我大概先敘述一下我的程式要做甚麼,以及碰到的問題
=============================
這是一個可以瀏覽並且播放音樂的網站
網頁端的PHP程式會先去找檔案清單(實際上是一個文字檔),內有檔名和連結
當然,也有可能還會有子資料夾
而當發現是一個音樂(MP3)檔時,會要求要開在新視窗,否則就在原視窗開啟就好
光看上面的說明可能不太清楚,所以下面附上Input檔案範例
(但是實際檔案內容不包含後面的註解)
Input檔案範例一:
Songs // 這是音樂清單的開頭指標
第一首歌
play.php?file=music1
第二首歌
play.php?file=music2
End_List // 清單結尾標示
//Input至此結束,不含換行
小說明:play.php是播放器頁面,必須開在新視窗
而Output必須是:(以HTML原始碼呈現)
<a href = play.php?file=music1 target="_blank">第一首歌</a>
<a href = play.php?file=music2 target="_blank">第二首歌</a>
Input範例二:
Folder // 資料夾清單開頭指標
第一個資料夾
list.php?list=2 // list.php就是這個網頁自己,他會列出一張檔案與資料夾的清單
End_List
Songs
第一首歌
play.php?file=music1
End_List
//Input至此結束,不含換行
Output必須是:
<a href = list.php?list=2 >第一個資料夾</a>
<a href = play.php?file=music1 target="_blank">第一首歌</a>
=================================================
以下是負責判斷清單類別,並且印出需要的HTML code的程式部分:
<?
$fp = fopen( "db/list_".$_GET['mid'].".txt", "r+" ) ;
$temp = fgets( $fp ) ; // 取得第一張清單的類型
if ( strcmp($temp, "Folder") == 0 ) { // 發現子資料夾清單
echo( "請選擇一項類別繼續瀏覽:<br>" );
$linkname = fgets( $fp ) ; // 讀進第一位
while( strcmp( $linkname, "End_List" ) != 0 ) {
// 清單還沒結束就一直讀
$link = fgets( $fp ) ;
?>
<a href = "<? echo($link) ; ?>&title=<? echo($linkname) ; ?>" ><?
echo($linkname) ; ?></a><br>
<?
$linkname = fgets( $fp ) ; // 下一位!
} // while
$temp = fgets( $fp ) ; // 既然有資料夾清單,那有歌曲的清單嗎?
if ( strcmp($temp, "Songs" ) == 0 ) { // 有歌曲清單耶!
echo( "或者,選擇一首歌曲播放:<br>" );
$linkname = fgets( $fp ) ; // 讀進第一位
while( strcmp( $linkname, "End_List" ) != 0 ) {
// 清單還沒結束就一直讀
$link = fgets( $fp ) ;
?>
<a href = "<? echo($link) ; ?>&title=<? echo($linkname) ; ?>"
target="_blank"><? echo($linkname) ; ?></a><br>
<?
$linkname = fgets( $fp ) ; // 下一位!
} // while
} // if 有歌單
} // if 有資料夾&歌單
else if ( strlen($temp) == 10 ) { // 只發現歌曲清單
echo( "請選擇一首歌曲播放:" );
$linkname = fgets( $fp ) ; // 讀進第一位
while( strcmp( $linkname, "End_List" ) != 0 ) {
// 清單還沒結束就一直讀
$link = fgets( $fp ) ;
?>
<a href = "<? echo($link) ; ?>&title=<? echo($linkname) ; ?>"
target="_blank"><? echo($linkname) ; ?></a><br>
<?
$linkname = fgets( $fp ) ; // 下一位!
} // while
} // else if
// 歌單處理結束
} // if
else {
echo("<center>本區域測試中,尚未開放,敬請拭目以待</center>") ;
} // else
?>
=====================================================
這程式的迴圈都會work,strcmp基本上也都沒有問題
但是很奇怪的是,只要從檔案讀出來,Songs長度會變成10(不是應該是5嗎?)
而Folder這個字串的長度則會變成12(不是應該是6嗎?)
所以造成無法進入迴圈,想當然爾,網頁上就是空白一片了
本來想說是不是有藏什麼字元,於是有嘗試加上trim()函式,但是結果一樣...
有任何人可以幫忙解答嗎?感激不盡!
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 111.250.127.134
推
02/07 17:24, , 1F
02/07 17:24, 1F
推
02/07 17:58, , 2F
02/07 17:58, 2F
推
02/07 18:00, , 3F
02/07 18:00, 3F
不好意思,複製code的時候少複製一行:
if ( file_exists( "db/list_".$_GET['mid'].".txt" ) ) {
所以~這是有做前置處裡的(只要找不到檔案就顯示一組訊息,並且不會繼續執行)
抱歉造成各位誤會~
推
02/07 18:02, , 4F
02/07 18:02, 4F
→
02/07 18:03, , 5F
02/07 18:03, 5F
推
02/07 18:04, , 6F
02/07 18:04, 6F
※ 編輯: jh961202 來自: 111.250.127.134 (02/08 00:31)
→
02/08 02:23, , 7F
02/08 02:23, 7F
→
02/08 02:26, , 8F
02/08 02:26, 8F
→
02/08 02:26, , 9F
02/08 02:26, 9F
→
02/08 02:27, , 10F
02/08 02:27, 10F
→
02/08 02:28, , 11F
02/08 02:28, 11F
不管置換成哪一種編碼方式都沒有用...
(網頁本身是UTF-8,確定每一個文件也都是UTF-8,甚至還試過ANSI...)
另外,範例中的Songs長度不是顯示10,而是7
(多兩個字元,到底是誰啊OAO)
而Folder換成Subfolder會變成13個字元...
(竟然多了4個字元...完全沒有規律阿0.0)
※ 編輯: jh961202 來自: 111.250.127.134 (02/08 20:18)