$val) { if($priority == 'tag') $attributes_data[$attr] = $val; else $result['attr'][$attr] = $val; //Set all the attributes in a array called 'attr' } } //See tag status and do the needed. if($type == "open") {//The starting of the tag '' $parent[$level-1] = &$current; if(!is_array($current) or (!in_array($tag, array_keys($current)))) { //Insert New tag $current[$tag] = $result; if($attributes_data) $current[$tag. '_attr'] = $attributes_data; $repeated_tag_index[$tag.'_'.$level] = 1; $current = &$current[$tag]; } else { //There was another element with the same tag name if(isset($current[$tag][0])) {//If there is a 0th element it is already an array $current[$tag][$repeated_tag_index[$tag.'_'.$level]] = $result; $repeated_tag_index[$tag.'_'.$level]++; } else {//This section will make the value an array if multiple tags with the same name appear together $current[$tag] = array($current[$tag],$result);//This will combine the existing item and the new item together to make an array $repeated_tag_index[$tag.'_'.$level] = 2; if(isset($current[$tag.'_attr'])) { //The attribute of the last(0th) tag must be moved as well $current[$tag]['0_attr'] = $current[$tag.'_attr']; unset($current[$tag.'_attr']); } } $last_item_index = $repeated_tag_index[$tag.'_'.$level]-1; $current = &$current[$tag][$last_item_index]; } } elseif($type == "complete") { //Tags that ends in 1 line '' //See if the key is already taken. if(!isset($current[$tag])) { //New Key $current[$tag] = $result; $repeated_tag_index[$tag.'_'.$level] = 1; if($priority == 'tag' and $attributes_data) $current[$tag. '_attr'] = $attributes_data; } else { //If taken, put all things inside a list(array) if(isset($current[$tag][0]) and is_array($current[$tag])) {//If it is already an array... // ...push the new element into that array. $current[$tag][$repeated_tag_index[$tag.'_'.$level]] = $result; if($priority == 'tag' and $get_attributes and $attributes_data) { $current[$tag][$repeated_tag_index[$tag.'_'.$level] . '_attr'] = $attributes_data; } $repeated_tag_index[$tag.'_'.$level]++; } else { //If it is not an array... $current[$tag] = array($current[$tag],$result); //...Make it an array using using the existing value and the new value $repeated_tag_index[$tag.'_'.$level] = 1; if($priority == 'tag' and $get_attributes) { if(isset($current[$tag.'_attr'])) { //The attribute of the last(0th) tag must be moved as well $current[$tag]['0_attr'] = $current[$tag.'_attr']; unset($current[$tag.'_attr']); } if($attributes_data) { $current[$tag][$repeated_tag_index[$tag.'_'.$level] . '_attr'] = $attributes_data; } } $repeated_tag_index[$tag.'_'.$level]++; //0 and 1 index is already taken } } } elseif($type == 'close') { //End of tag '' $current = &$parent[$level-1]; } } return($xml_array); } /*=========================================*/ function array2xml($array, $indent = 0, $parent_key = '') { $xml = ''; foreach($array as $key => $value){ if (strpos($key, '_attr') !== false) { continue; } $skipTag = false; if (is_numeric($key)) { $key = $parent_key; } if (is_array($value) && isset($value[0])) { $skipTag = true; } if (!$skipTag) { $xml .= str_repeat(' ', $indent); $xml .= "<$key"; if (isset($array[$key.'_attr']) && !empty($array[$key.'_attr'])) { foreach ($array[$key.'_attr'] as $k=>$v) { $xml .= ' '.$k.' = "'.$v.'"'; } } $xml .= ">"; } if(is_array($value)){ $xml .= "\n" . array2xml($value, $indent + 1, $key); $xml .= str_repeat(' ', $indent); } else{ if (strtolower($key) == 'description') { $xml .= ''; } } if (!$skipTag) { $xml .= '\n"; } } return $xml; } /*=========================================*/ function xml2array($contents) { $curArray = basexml2array($contents); return replaceItems($curArray); return $curArray; } /*=========================================*/ function replaceItems($data) { $index = 0; $resArray = array(); foreach ($data as $key => $value) { if ($key == 'item') { $key = $index++; } $resArray[$key] = is_array($value) ? replaceItems($value) : $value; } return $resArray; } /*=========================================*/ function xmGetTagValues($array) { global $gaLang; $aTags = array('title'=>array('title'),'description'=>array('content','description'),'link'=>array('id','link'),'pubDate'=>array('date','pubDate','pubdate','issued')); $gaLang = array(); $gNoReturn = true; $aReturn = array(); if (!empty($array) && is_array($array)) { foreach ($array as $key=>$val) { $ffTag = ''; //Check value & set string from array if (is_array($val)) { $ret = ''; $alter = false; foreach ($val as $_k=>$_v) { if (is_array($_v)) { foreach ($_v as $_k1=>$_v1) { if ($_k1 == 'href' && htValidURL($_v1)) { $ret = $_v1; } if ($_k1 == 'rel' && $_v1 == 'alternate') { $alter = true; } } } if ($alter) { break; } } $val = $ret; } $skip = true; foreach ($aTags as $tag_key=>$tag_val) { foreach ($tag_val as $tv) { if (strpos($key, $tv) === false || strpos($key,'_attr') !== false) { continue; } //if ($tag_key == 'link' && !htValidURL($val)) { if ($tag_key == 'link' && empty($val)) { continue; } if ($tag_key == 'description' && empty($val)) { continue; } $skip = false; $ffTag = $tag_key; break; } if (!$skip) break; } if ($skip || $ffTag == '' || !is_string($val)) continue; $aKeys = array_keys($aReturn); if (in_array($ffTag, $aKeys)) { continue; } switch ($ffTag) { case 'pubDate': $t = strtotime($val); //$val = date('d',$t).' '.$gaLang[date('M',$t)].' '.date(' Y H:i',$t); $val = _7feedsParseDate($t); break; case 'description': $i=0; while (true) { $aTmp = array(); if (!preg_match_all('/(&[\S]{2,6};)/iUm', $val, $aTmp) || $i > 10) { break; }else { $val = html_entity_decode($val,ENT_NOQUOTES,'UTF-8'); $i++; continue; } } //$val = strip_tags_attributes($val,',,
,,,
  • ,

    ,,,',array('height','alt','width','clear','size','class','border','style')); $val = strip_tags_attributes($val,',,,,