wppaste
WordPress

getid3_id3v1

Source
wp-includes/ID3/module.tag.id3v1.php:21

Compatibility

WordPress
core
  • 6.7.7
  • 6.8.8
  • 6.9.7
  • 7.0.4
  • 7.1.0

Present in every tracked release (6.7.7 to 7.1.0).

Methods · 7

Source code

class getid3_id3v1 extends getid3_handler{	/**	 * @return bool	 */	public function Analyze() {		$info = &$this->getid3->info; 		if (!getid3_lib::intValueSupported($info['filesize'])) {			$this->warning('Unable to check for ID3v1 because file is larger than '.round(PHP_INT_MAX / 1073741824).'GB');			return false;		} elseif ($info['filesize'] < 128) {			$this->warning('Unable to check for ID3v1 because file is too small');			return false;		} 		if($info['filesize'] < 256) {			$this->fseek(-128, SEEK_END);			$preid3v1 = '';			$id3v1tag = $this->fread(128);		} else {			$this->fseek(-256, SEEK_END);			$preid3v1 = $this->fread(128);			$id3v1tag = $this->fread(128);		}  		if (substr($id3v1tag, 0, 3) == 'TAG') { 			$info['avdataend'] = $info['filesize'] - 128; 			$ParsedID3v1            = array();			$ParsedID3v1['title']   = $this->cutfield(substr($id3v1tag,   3, 30));			$ParsedID3v1['artist']  = $this->cutfield(substr($id3v1tag,  33, 30));			$ParsedID3v1['album']   = $this->cutfield(substr($id3v1tag,  63, 30));			$ParsedID3v1['year']    = $this->cutfield(substr($id3v1tag,  93,  4));			$ParsedID3v1['comment'] =                 substr($id3v1tag,  97, 30);  // can't remove nulls yet, track detection depends on them			$ParsedID3v1['genreid'] =             ord(substr($id3v1tag, 127,  1)); 			// If second-last byte of comment field is null and last byte of comment field is non-null			// then this is ID3v1.1 and the comment field is 28 bytes long and the 30th byte is the track number			if (($id3v1tag[125] === "\x00") && ($id3v1tag[126] !== "\x00")) {				$ParsedID3v1['track_number'] = ord(substr($ParsedID3v1['comment'], 29,  1));				$ParsedID3v1['comment']      =     substr($ParsedID3v1['comment'],  0, 28);			}			$ParsedID3v1['comment'] = $this->cutfield($ParsedID3v1['comment']); 			$ParsedID3v1['genre'] = $this->LookupGenreName($ParsedID3v1['genreid']);			if (!empty($ParsedID3v1['genre'])) {				unset($ParsedID3v1['genreid']);			}			if (empty($ParsedID3v1['genre']) || ($ParsedID3v1['genre'] == 'Unknown')) {				unset($ParsedID3v1['genre']);			} 			foreach ($ParsedID3v1 as $key => $value) {				$ParsedID3v1['comments'][$key][0] = $value;			}			$ID3v1encoding = $this->getid3->encoding_id3v1;			if ($this->getid3->encoding_id3v1_autodetect) {				// ID3v1 encoding detection hack START				// ID3v1 is defined as always using ISO-8859-1 encoding, but it is not uncommon to find files tagged with ID3v1 using Windows-1251 or other character sets				// Since ID3v1 has no concept of character sets there is no certain way to know we have the correct non-ISO-8859-1 character set, but we can guess				foreach ($ParsedID3v1['comments'] as $tag_key => $valuearray) {					foreach ($valuearray as $key => $value) {						if (preg_match('#^[\\x00-\\x40\\x80-\\xFF]+$#', $value) && !ctype_digit((string) $value)) { // check for strings with only characters above chr(128) and punctuation/numbers, but not just numeric strings (e.g. track numbers or years)							foreach (array('Windows-1251', 'KOI8-R') as $id3v1_bad_encoding) {								if (function_exists('mb_convert_encoding') && @mb_convert_encoding($value, $id3v1_bad_encoding, $id3v1_bad_encoding) === $value) {									$ID3v1encoding = $id3v1_bad_encoding;									$this->warning('ID3v1 detected as '.$id3v1_bad_encoding.' text encoding in '.$tag_key);									break 3;								} elseif (function_exists('iconv') && @iconv($id3v1_bad_encoding, $id3v1_bad_encoding, $value) === $value) {									$ID3v1encoding = $id3v1_bad_encoding;									$this->warning('ID3v1 detected as '.$id3v1_bad_encoding.' text encoding in '.$tag_key);									break 3;								}							}						}					}				}

Changelog

Unchanged from 6.7.7 through 7.1.0.

  1. 6.7.7
  2. 6.8.8
  3. 6.9.7
  4. 7.0.4
  5. 7.1.0

Signature, return type and hooks compared across 5 parsed releases.

About this page

Parsed data
Generated from the wordpress-develop 7.1.0 tag, from src/wp-includes/ID3/module.tag.id3v1.php, and regenerated for each WordPress release so it tracks the code rather than a snapshot of it.
Corrections
Something wrong on this page? Report it and it gets fixed in the next regeneration.