static function CopyTagsToComments(&$ThisFileInfo) { // Copy all entries from ['tags'] into common ['comments'] if (!empty($ThisFileInfo['tags'])) { foreach ($ThisFileInfo['tags'] as $tagtype => $tagarray) { foreach ($tagarray as $tagname => $tagdata) { foreach ($tagdata as $key => $value) { if (!empty($value)) { if (empty($ThisFileInfo['comments'][$tagname])) { // fall through and append value } elseif ($tagtype == 'id3v1') { $newvaluelength = strlen(trim($value)); foreach ($ThisFileInfo['comments'][$tagname] as $existingkey => $existingvalue) { $oldvaluelength = strlen(trim($existingvalue)); if ($newvaluelength <= $oldvaluelength && substr($existingvalue, 0, $newvaluelength) == trim($value)) { // new value is identical but shorter-than (or equal-length to) one already in comments - skip break 2; } } } else { $newvaluelength = strlen(trim($value)); foreach ($ThisFileInfo['comments'][$tagname] as $existingkey => $existingvalue) { $oldvaluelength = strlen(trim($existingvalue)); if ($newvaluelength > $oldvaluelength && substr(trim($value), 0, strlen($existingvalue)) == $existingvalue) { $ThisFileInfo['comments'][$tagname][$existingkey] = trim($value); break 2; } } } if (empty($ThisFileInfo['comments'][$tagname]) || !in_array(trim($value), $ThisFileInfo['comments'][$tagname])) { $ThisFileInfo['comments'][$tagname][] = trim($value); } } } } } // Copy to ['comments_html'] foreach ($ThisFileInfo['comments'] as $field => $values) { foreach ($values as $index => $value) { $ThisFileInfo['comments_html'][$field][$index] = str_replace('�', '', getid3_lib::MultiByteCharString2HTML($value, $ThisFileInfo['encoding'])); } } } }
function HandleAllTags() { // key name => array (tag name, character encoding) static $tags; if (empty($tags)) { $tags = array('asf' => array('asf', 'UTF-16LE'), 'midi' => array('midi', 'ISO-8859-1'), 'nsv' => array('nsv', 'ISO-8859-1'), 'ogg' => array('vorbiscomment', 'UTF-8'), 'png' => array('png', 'UTF-8'), 'tiff' => array('tiff', 'ISO-8859-1'), 'quicktime' => array('quicktime', 'UTF-8'), 'real' => array('real', 'ISO-8859-1'), 'vqf' => array('vqf', 'ISO-8859-1'), 'zip' => array('zip', 'ISO-8859-1'), 'riff' => array('riff', 'ISO-8859-1'), 'lyrics3' => array('lyrics3', 'ISO-8859-1'), 'id3v1' => array('id3v1', $this->encoding_id3v1), 'id3v2' => array('id3v2', 'UTF-8'), 'ape' => array('ape', 'UTF-8'), 'cue' => array('cue', 'ISO-8859-1'), 'matroska' => array('matroska', 'UTF-8')); } // loop through comments array foreach ($tags as $comment_name => $tagname_encoding_array) { list($tag_name, $encoding) = $tagname_encoding_array; // fill in default encoding type if not already present if (isset($this->info[$comment_name]) && !isset($this->info[$comment_name]['encoding'])) { $this->info[$comment_name]['encoding'] = $encoding; } // copy comments if key name set if (!empty($this->info[$comment_name]['comments'])) { foreach ($this->info[$comment_name]['comments'] as $tag_key => $valuearray) { foreach ($valuearray as $key => $value) { if (is_string($value)) { $value = trim($value, " \r\n\t"); // do not trim nulls from $value!! Unicode characters will get mangled if trailing nulls are removed! } if ($value) { $this->info['tags'][trim($tag_name)][trim($tag_key)][] = $value; } } } if (!isset($this->info['tags'][$tag_name])) { // comments are set but contain nothing but empty strings, so skip continue; } if ($this->option_tags_html) { foreach ($this->info['tags'][$tag_name] as $tag_key => $valuearray) { foreach ($valuearray as $key => $value) { if (is_string($value)) { //$this->info['tags_html'][$tag_name][$tag_key][$key] = getid3_lib::MultiByteCharString2HTML($value, $encoding); $this->info['tags_html'][$tag_name][$tag_key][$key] = str_replace('�', '', trim(getid3_lib::MultiByteCharString2HTML($value, $encoding))); } else { $this->info['tags_html'][$tag_name][$tag_key][$key] = $value; } } } } $this->CharConvert($this->info['tags'][$tag_name], $encoding); // only copy gets converted! } } // pictures can take up a lot of space, and we don't need multiple copies of them // let there be a single copy in [comments][picture], and not elsewhere if (!empty($this->info['tags'])) { $unset_keys = array('tags', 'tags_html'); foreach ($this->info['tags'] as $tagtype => $tagarray) { foreach ($tagarray as $tagname => $tagdata) { if ($tagname == 'picture') { foreach ($tagdata as $key => $tagarray) { $this->info['comments']['picture'][] = $tagarray; if (isset($tagarray['data']) && isset($tagarray['image_mime'])) { if (isset($this->info['tags'][$tagtype][$tagname][$key])) { unset($this->info['tags'][$tagtype][$tagname][$key]); } if (isset($this->info['tags_html'][$tagtype][$tagname][$key])) { unset($this->info['tags_html'][$tagtype][$tagname][$key]); } } } } } foreach ($unset_keys as $unset_key) { // remove possible empty keys from (e.g. [tags][id3v2][picture]) if (empty($this->info[$unset_key][$tagtype]['picture'])) { unset($this->info[$unset_key][$tagtype]['picture']); } if (empty($this->info[$unset_key][$tagtype])) { unset($this->info[$unset_key][$tagtype]); } if (empty($this->info[$unset_key])) { unset($this->info[$unset_key]); } } // remove duplicate copy of picture data from (e.g. [id3v2][comments][picture]) if (isset($this->info[$tagtype]['comments']['picture'])) { unset($this->info[$tagtype]['comments']['picture']); } if (empty($this->info[$tagtype]['comments'])) { unset($this->info[$tagtype]['comments']); } if (empty($this->info[$tagtype])) { unset($this->info[$tagtype]); } } } return true; }
function HandleAllTags() { // key name => array (tag name, character encoding) static $tags; if (empty($tags)) { $tags = array('asf' => array('asf', 'UTF-16LE'), 'midi' => array('midi', 'ISO-8859-1'), 'nsv' => array('nsv', 'ISO-8859-1'), 'ogg' => array('vorbiscomment', 'UTF-8'), 'png' => array('png', 'UTF-8'), 'tiff' => array('tiff', 'ISO-8859-1'), 'quicktime' => array('quicktime', 'ISO-8859-1'), 'real' => array('real', 'ISO-8859-1'), 'vqf' => array('vqf', 'ISO-8859-1'), 'zip' => array('zip', 'ISO-8859-1'), 'riff' => array('riff', 'ISO-8859-1'), 'lyrics3' => array('lyrics3', 'ISO-8859-1'), 'id3v1' => array('id3v1', $this->encoding_id3v1), 'id3v2' => array('id3v2', 'UTF-8'), 'ape' => array('ape', 'UTF-8')); } // loop thru comments array foreach ($tags as $comment_name => $tagname_encoding_array) { list($tag_name, $encoding) = $tagname_encoding_array; // fill in default encoding type if not already present if (isset($this->info[$comment_name]) && !isset($this->info[$comment_name]['encoding'])) { $this->info[$comment_name]['encoding'] = $encoding; } // copy comments if key name set if (!empty($this->info[$comment_name]['comments'])) { foreach ($this->info[$comment_name]['comments'] as $tag_key => $valuearray) { foreach ($valuearray as $key => $value) { if (strlen(trim($value)) > 0) { $this->info['tags'][trim($tag_name)][trim($tag_key)][] = $value; // do not trim!! Unicode characters will get mangled if trailing nulls are removed! } } } if (!isset($this->info['tags'][$tag_name])) { // comments are set but contain nothing but empty strings, so skip continue; } if ($this->option_tags_html) { foreach ($this->info['tags'][$tag_name] as $tag_key => $valuearray) { foreach ($valuearray as $key => $value) { if (is_string($value)) { //$this->info['tags_html'][$tag_name][$tag_key][$key] = getid3_lib::MultiByteCharString2HTML($value, $encoding); $this->info['tags_html'][$tag_name][$tag_key][$key] = str_replace('�', '', getid3_lib::MultiByteCharString2HTML($value, $encoding)); } else { $this->info['tags_html'][$tag_name][$tag_key][$key] = $value; } } } } $this->CharConvert($this->info['tags'][$tag_name], $encoding); // only copy gets converted! } } return true; }
static function CopyTagsToComments(&$ThisFileInfo) { // Copy all entries from ['tags'] into common ['comments'] if (!empty($ThisFileInfo['tags'])) { foreach ($ThisFileInfo['tags'] as $tagtype => $tagarray) { foreach ($tagarray as $tagname => $tagdata) { foreach ($tagdata as $key => $value) { if (!empty($value)) { if (empty($ThisFileInfo['comments'][$tagname])) { // fall through and append value } elseif ($tagtype == 'id3v1') { $newvaluelength = strlen(trim($value)); foreach ($ThisFileInfo['comments'][$tagname] as $existingkey => $existingvalue) { $oldvaluelength = strlen(trim($existingvalue)); if ($newvaluelength <= $oldvaluelength && substr($existingvalue, 0, $newvaluelength) == trim($value)) { // new value is identical but shorter-than (or equal-length to) one already in comments - skip break 2; } } } elseif (!is_array($value)) { $newvaluelength = strlen(trim($value)); foreach ($ThisFileInfo['comments'][$tagname] as $existingkey => $existingvalue) { $oldvaluelength = strlen(trim($existingvalue)); if ($newvaluelength > $oldvaluelength && substr(trim($value), 0, strlen($existingvalue)) == $existingvalue) { $ThisFileInfo['comments'][$tagname][$existingkey] = trim($value); break 2; } } } if (is_array($value) || empty($ThisFileInfo['comments'][$tagname]) || !in_array(trim($value), $ThisFileInfo['comments'][$tagname])) { $value = is_string($value) ? trim($value) : $value; $ThisFileInfo['comments'][$tagname][] = $value; } } } } } // Copy to ['comments_html'] foreach ($ThisFileInfo['comments'] as $field => $values) { if ($field == 'picture') { // pictures can take up a lot of space, and we don't need multiple copies of them // let there be a single copy in [comments][picture], and not elsewhere continue; } foreach ($values as $index => $value) { if (is_array($value)) { $ThisFileInfo['comments_html'][$field][$index] = $value; } else { $ThisFileInfo['comments_html'][$field][$index] = str_replace('�', '', getid3_lib::MultiByteCharString2HTML($value, $ThisFileInfo['encoding'])); } } } } return true; }