L
L
linuxnb2019-01-26 21:16:58
PHP
linuxnb, 2019-01-26 21:16:58

How to change the ID3 of an MP3 file to Cyrillic?

Hello everyone, help me figure it out.
There is a code that works perfectly for Latin, but Cyrillic pours encoding (((
(I can’t install Dll, well, like this, I would have installed it a long time ago, but I can’t (it makes no sense to offer))

force_download('101.mp3','Исполнитель - Композиция');


function tagSize($size_to_convert) {
    $result = 0;
    $mask = 0x7F;
    for ($i = 0; $i < 4; ++$i) {
        $temp = ($size_to_convert >> 7 * $i) & $mask;
        $result |= ($temp << 8 * $i);
    }
        
    return $result + 10;
}
 
 
function force_download($file, $name) {
    if (!file_exists($file)) die("Файл не найден!");
    if (fopen($file, 'r') && ob_get_level()) {
        ob_end_clean();
    }
    // $name должна быть в формате "Исполнитель - Композиция"
    list($artist, $title) = explode(' - ', $name);
    $comment = 'site.ru';
    
    $tpe1 = pack('A4Nx3A*', 'TPE1', strlen($artist)+1, $artist);
    $tit2 = pack('A4Nx3A*', 'TIT2', strlen($title)+1, $title);
    $comm = pack('A4Nx7A*', 'COMM', strlen($comment)+5, $comment);
    
    $idlength = strlen($tpe1.$tit2.$comm."\0");
    $id3 = pack('A3vxN', 'ID3', 0x3, tagSize($idlength));
    $length = filesize($file) + $idlength + 10;
    header('Content-Description: File Transfer');
    header('Content-Type: application/octet-stream');
    header('Content-Disposition: attachment; filename='.$name.'.mp3');
    header('Content-Length:'.$length);
    print $id3.$tit2.$tpe1.$comm."\0".file_get_contents($file);
    exit;
}

Answer the question

In order to leave comments, you need to log in

1 answer(s)
S
Snewer, 2019-01-26
@linuxnb

force_download('101.mp3','Исполнитель - Композиция');

function tagSize($size_to_convert) {
    $result = 0;
    $mask = 0x7F;
    for ($i = 0; $i < 4; ++$i) {
        $temp = ($size_to_convert >> 7 * $i) & $mask;
        $result |= ($temp << 8 * $i);
    }
        
    return $result + 10;
}
 
 
function force_download($file, $name) {
    if (!file_exists($file)) die("Файл не найден!");
    if (fopen($file, 'r') && ob_get_level()) {
        ob_end_clean();
    }
    // $name должна быть в формате "Исполнитель - Композиция"
    list($artist, $title) = explode(' - ', $name);
    $comment = 'site.ru';
    
  $artist = mb_convert_encoding($artist, 'cp1251', 'utf-8');
  $title = mb_convert_encoding($title, 'cp1251', 'utf-8');
  $comment = mb_convert_encoding($comment, 'cp1251', 'utf-8');
  
    $tpe1 = pack('A4Nx3A*', 'TPE1', strlen($artist)+1, $artist);
    $tit2 = pack('A4Nx3A*', 'TIT2', strlen($title)+1, $title);
    $comm = pack('A4Nx7A*', 'COMM', strlen($comment)+5, $comment);
    
    $idlength = strlen($tpe1.$tit2.$comm."\0");
    $id3 = pack('A3vxN', 'ID3', 0x3, tagSize($idlength));
    $length = filesize($file) + $idlength + 10;
    header('Content-Description: File Transfer');
    header('Content-Type: application/octet-stream');
    header('Content-Disposition: attachment; filename='.$name.'.mp3');
    header('Content-Length:'.$length);
    print $id3.$tit2.$tpe1.$comm."\0".file_get_contents($file);
    exit;
}

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question