getID3的注意事項與圖檔檢查範例
上次介紹如何使用getID3來檢查使用者上傳的圖檔。判斷方式雖然簡單…不過,個人在使用上覺得有些事情要稍微注意。針對傳回的array以及我在讀取mp3內的中文tag時遇到的狀況做說明。最後並附上測試項目的結果…
當下,並不太懂他真正的含意。不過,後來因為要瞭解getID3傳回的array結構,於是翻了一下內附的說明文件structure.txt。發現裡面有如下的解釋,就比較能瞭解了...
翻了一下getID3的code,裡面有定義各種檔案、欄位所採用的編碼。其中,他提供兩個設定讓呼叫者改變。
以我測試用的mp3檔案為例,裡面的中文字是big5編碼。因此,我加上下列的處理後,讀出來的中文就正常了。(當然,要看您檔案內的編碼做調整)
附註:如果您的環境是unix-like,mp3檔案又是中文檔案時,請記得先做好OS的編碼設定。
最後,附上一張以getID3所附的範例程式 - demo.browse.php ,讀取用來測試之用的檔案結果。
由上而下的五個檔案,分別測試的項目和結果為…
array structure
在getID3範例 - demo.basic.php的程式碼中,最後有一段程式和程式註解,節錄如下…
- /*
- Optional: copies data from all subarrays of [tags] into [comments] so
- metadata is all available in one location for all tag formats
- metainformation is always available under [tags] even if this is not called
- */
- getid3_lib::CopyTagsToComments($ThisFileInfo);
If you want to merge all available tags (for example, ID3v2 + ID3v1) into one array, you can call getid3_lib::CopyTagsToComments($ThisFileInfo) and you'll then have ['comments'] and ['comments_html'] which are identical to ['tags'] and ['tags_html'] except the array is one dimension shorter (no tag type array keys). For example, artist is: ['tags_html']['id3v1']['artist'][0] or ['comments_html']['artist'][0]
附註:在測試時,我發現他的變數名稱定義似乎有點問題。在讀取不同的檔案時,有看過 ['title'],有的卻是['Title']。
中文問題
getID3可以讀取mp3內的ID3資訊(ID3v2 & ID3v1)。如果,您的mp3檔案中的ID3資訊是中文時,採用預設值(ISO-8859-1)讀取,將會得到亂碼。
翻了一下getID3的code,裡面有定義各種檔案、欄位所採用的編碼。其中,他提供兩個設定讓呼叫者改變。
以我測試用的mp3檔案為例,裡面的中文字是big5編碼。因此,我加上下列的處理後,讀出來的中文就正常了。(當然,要看您檔案內的編碼做調整)
- $getID3->encoding='UTF-8'; //請依照自己檔案條件修改
- $getID3->encoding_id3v1='BIG-5'; //請依照自己檔案條件修改
最後,附上一張以getID3所附的範例程式 - demo.browse.php ,讀取用來測試之用的檔案結果。
由上而下的五個檔案,分別測試的項目和結果為…
- png圖檔,但是亂改binary。
結果出現warning - 正常png圖檔。
- 利用愛的機器,動過手腳後的png圖檔。
結果出現warning - 假冒png圖檔的zip(將.zip改名成.png)。
結果被判斷出檔案為.zip - 檔名為中文的mp3檔案。
因為沒做上述的設定,將ID3v1編碼改為big5,因此變成亂碼。
ID3v2因為內定採用UTF8,所以沒問題
留言