I use the PHP code below in order to extract metadatas from MP3
files. it works fine.
But when Title
tag contain special characters, then the title is removed autimatically.
How to make it able to work with unicode. Example of title tag : áåðÐáýúíó
?
<?php
$mp3 = 'example.mp3';
$myResult = tagReader($mp3);
print_r($myResult);
function tagReader($file){
$id3v23 = array ("TIT2","TALB","TPE1","TRCK","TDRC","TLEN","USLT", "TT2");
$id3v22 = array ("TT2","TAL","TP1","TRK","TYE","TLE","ULT");
$fsize = filesize($file);
$fd = fopen($file,"r");
$tag = fread($fd,$fsize);
$tmp = "";
fclose($fd);
if (substr($tag,0,3) == "ID3") {
$result['FileName'] = $file;
// $result['TAG'] = substr($tag,0,3);
$result['Version'] = hexdec(bin2hex(substr($tag,3,1))).".".hexdec(bin2hex(substr($tag,4,1)));
}
if($result['Version'] == "4.0" || $result['Version'] == "3.0"){
for ($i=0;$i<count($id3v23);$i++){
if (strpos($tag,$id3v23[$i].chr(0))!= FALSE){
$pos = strpos($tag, $id3v23[$i].chr(0));
$len = hexdec(bin2hex(substr($tag,($pos+5),3)));
$data = substr($tag, $pos, 9+$len);
for ($a=0;$a<strlen($data);$a++){
$char = substr($data,$a,1);
if($char >= " " && $char <= "~") $tmp.=$char;
}
if(substr($tmp,0,4) == "TIT2") $result['Title'] = substr($tmp,4);
if(substr($tmp,0,4) == "TALB") $result['Album'] = substr($tmp,4);
if(substr($tmp,0,4) == "TPE1") $result['Author'] = substr($tmp,4);
if(substr($tmp,0,4) == "TRCK") $result['Track'] = substr($tmp,4);
if(substr($tmp,0,4) == "TDRC") $result['Year'] = substr($tmp,4);
if(substr($tmp,0,4) == "TLEN") $result['Lenght'] = substr($tmp,4);
if(substr($tmp,0,4) == "USLT") $result['Lyric'] = substr($tmp,7);
$tmp = "";
}
}
}
return $result;
}
?>
Solution:
<?php
$mp3 = 'example.mp3';
$myResult = tagReader($mp3);
print_r($myResult);
function unichr($i) {
return iconv('UCS-4LE', 'UTF-8', pack('V', $i));
}
function tagReader($file){
$id3v23 = array ("TIT2","TALB","TPE1","TRCK","TDRC","TLEN","USLT", "TT2");
$fsize = filesize($file);
$fd = fopen($file,"r");
$tag = fread($fd,$fsize);
$tmp = "";
fclose($fd);
if (substr($tag,0,3) == "ID3") {
$result['FileName'] = $file;
$result['Version'] = hexdec(bin2hex(substr($tag,3,1))).".".hexdec(bin2hex(substr($tag,4,1)));
}
if($result['Version'] == "4.0" || $result['Version'] == "3.0"){
for ($i=0;$i<count($id3v23);$i++){
if (strpos($tag,$id3v23[$i].chr(0))!= FALSE){
$pos = strpos($tag, $id3v23[$i].chr(0));
$len = hexdec(bin2hex(substr($tag,($pos+5),3)));
$data = substr($tag, $pos, 9+$len);
for ($a=0;$a<strlen($data);$a++){
$char = substr($data,$a,1);
//if($char >= " " && $char <= "~")
$tmp.=$char;
}
if(substr($tmp,0,4) == "TIT2") {
$result['Title'] = utf8_encode(substr($tmp,13));
}
$tmp = "";
}
}
}
return $result;
}
?>