이번에 소개할 서포트 함수는 HTML 소스코드에서 특정 태그의 속성값을 배열로 추출할 수 있는 함수다. 

보통 이미지 태그에서 src 속성을 추출 하기위해 많이 사용하는 정규식이 있는데 해당 정규식을 조금 커스텀하여

모든 태그의 특정 속성들을 전부 가져올 수 있도록 개선해보았다. 

 

사용방법 및 예제는 아래를 참고하길 바란다. 

 

get_tag_data_all 함수

/*
	** get_tag_data_all
	** 태그에서 특정 속성값을 모두 가져온다.
	** 사용
		get_tag_data_all("HTML소스",array("태그명"=>array("속성1","속성2") ));
	** 리턴 
		array("태그명"=>array("속성1"=>array('값1','값2'),"속성2"=>array('값1','값2')));
*/
function get_tag_data_all($contents,$option = array()){
	if(empty($contents)){ return array(); }
	$result = array();
	if( !is_array($option)){ $option = array(); }

	foreach($option as $tag=>$property){
		$result[$tag] = array();
		foreach($property as $item){
			$result[$tag][$item] = array();
			preg_match_all("/<".$tag."[^>]*[\s]".$item."=[\"']?([^>\"']+)[\"']?[^>]*>/i", $contents, $matches);
			if( !empty($matches[1])){
				$matches[1] = array_filter($matches[1]);
			}
			$result[$tag][$item] = $matches[1];
		}
	}
 	return $result;
}

 

예제

<?php 
define('source','<img src="http://blog.redinfo.co.kr/img1.png" data-src="data:http://blog.redinfo.co.kr/img1.png" title="title" data-title="data:title"/><img src="http://blog.redinfo.co.kr/img2.png" data-src="data:http://blog.redinfo.co.kr/img2.png" title="title2"  data-title="data:title2"/><br data-info="line22" />
<br data-info="line57" />');
$getItem = array('img'=>array('src','data-src','title','data-title'),'br'=>array('data-info'));
$get = get_tag_data_all(source,$getItem);
echo '<pre>';print_r($get);echo '</pre>';
/*
	result: 
	
		Array
		(
		    [img] => Array
		        (
		            [src] => Array
		                (
		                    [0] => http://blog.redinfo.co.kr/img1.png
		                    [1] => http://blog.redinfo.co.kr/img2.png
		                )

		            [data-src] => Array
		                (
		                    [0] => data:http://blog.redinfo.co.kr/img1.png
		                    [1] => data:http://blog.redinfo.co.kr/img2.png
		                )

		            [title] => Array
		                (
		                    [0] => title
		                    [1] => title2
		                )

		            [data-title] => Array
		                (
		                    [0] => data:title
		                    [1] => data:title2
		                )

		        )

		    [br] => Array
		        (
		            [data-info] => Array
		                (
		                    [0] => line22
		                    [1] => line57
		                )

		        )

		)
*/