分析HTML,并将结果存到一个数组中。看看里面的注释吧。:)
时间:2007-02-17 来源:PHP爱好者
<?php
中国IT动力UaimAQhUEp1HpOa1e2Wqfzmw5
/*
中国IT动力UaimAQhUEp1HpOa1e2Wqfzmw5
* parseHtml.php
中国IT动力UaimAQhUEp1HpOa1e2Wqfzmw5
* Author: Carlos Costa Jordao
中国IT动力UaimAQhUEp1HpOa1e2Wqfzmw5
* Email: [email protected]
*
中国IT动力UaimAQhUEp1HpOa1e2Wqfzmw5
* My notation of variables:
中国IT动力UaimAQhUEp1HpOa1e2Wqfzmw5
* i_ = integer, ex: i_count
中国IT动力UaimAQhUEp1HpOa1e2Wqfzmw5
* a_ = array, a_html
中国IT动力UaimAQhUEp1HpOa1e2Wqfzmw5
* b_ = boolean,
中国IT动力UaimAQhUEp1HpOa1e2Wqfzmw5
* s_ = string
中国IT动力UaimAQhUEp1HpOa1e2Wqfzmw5
*
中国IT动力UaimAQhUEp1HpOa1e2Wqfzmw5
* What it does:
中国IT动力UaimAQhUEp1HpOa1e2Wqfzmw5
* - parses a html string and get the tags
中国IT动力UaimAQhUEp1HpOa1e2Wqfzmw5
* - exceptions: html tags like <br> <hr> </a>, etc
中国IT动力UaimAQhUEp1HpOa1e2Wqfzmw5
* - At the end, the array will look like this:
中国IT动力UaimAQhUEp1HpOa1e2Wqfzmw5
* ["IMG"][0]["SRC"] = "xxx"
中国IT动力UaimAQhUEp1HpOa1e2Wqfzmw5
* ["IMG"][1]["SRC"] = "xxx"
中国IT动力UaimAQhUEp1HpOa1e2Wqfzmw5
* ["IMG"][1]["ALT"] = "xxx"
中国IT动力UaimAQhUEp1HpOa1e2Wqfzmw5
* ["A"][0]["HREF"] = "xxx"
中国IT动力UaimAQhUEp1HpOa1e2Wqfzmw5
*
中国IT动力UaimAQhUEp1HpOa1e2Wqfzmw5
*/
中国IT动力UaimAQhUEp1HpOa1e2Wqfzmw5
function parseHtml( $s_str )
中国IT动力UaimAQhUEp1HpOa1e2Wqfzmw5
{
中国IT动力UaimAQhUEp1HpOa1e2Wqfzmw5
$i_indicatorL = 0;
中国IT动力UaimAQhUEp1HpOa1e2Wqfzmw5
$i_indicatorR = 0;
中国IT动力UaimAQhUEp1HpOa1e2Wqfzmw5
$s_tagOption = "";
中国IT动力UaimAQhUEp1HpOa1e2Wqfzmw5
$i_arrayCounter = 0;
中国IT动力UaimAQhUEp1HpOa1e2Wqfzmw5
$a_html = array();
中国IT动力UaimAQhUEp1HpOa1e2Wqfzmw5
// Search for a tag in string
中国IT动力UaimAQhUEp1HpOa1e2Wqfzmw5
while( is_int(($i_indicatorL=strpos($s_str,"<",$i_indicatorR))) ) {
中国IT动力UaimAQhUEp1HpOa1e2Wqfzmw5
// Get everything into tag...
中国IT动力UaimAQhUEp1HpOa1e2Wqfzmw5
$i_indicatorL++;
中国IT动力UaimAQhUEp1HpOa1e2Wqfzmw5
$i_indicatorR = strpos($s_str,">", $i_indicatorL);
中国IT动力UaimAQhUEp1HpOa1e2Wqfzmw5
$s_temp = substr($s_str, $i_indicatorL, ($i_indicatorR-$i_indicatorL) );
中国IT动力UaimAQhUEp1HpOa1e2Wqfzmw5
$a_tag = explode( ' ', $s_temp );
中国IT动力UaimAQhUEp1HpOa1e2Wqfzmw5
// Here we get the tag's name
中国IT动力UaimAQhUEp1HpOa1e2Wqfzmw5
list( ,$s_tagName,, ) = each($a_tag);
中国IT动力UaimAQhUEp1HpOa1e2Wqfzmw5
$s_tagName = strtoupper($s_tagName);
中国IT动力UaimAQhUEp1HpOa1e2Wqfzmw5
// Well, I am not interesting in <br>, </font> or anything else like that...
中国IT动力UaimAQhUEp1HpOa1e2Wqfzmw5
// So, this is false for tags without options.
中国IT动力UaimAQhUEp1HpOa1e2Wqfzmw5
$b_boolOptions = is_array(($s_tagOption=each($a_tag))) && $s_tagOption[1];
中国IT动力UaimAQhUEp1HpOa1e2Wqfzmw5
if( $b_boolOptions ) {
中国IT动力UaimAQhUEp1HpOa1e2Wqfzmw5
// Without this, we will mess up the array
中国IT动力UaimAQhUEp1HpOa1e2Wqfzmw5
$i_arrayCounter = (int)count($a_html[$s_tagName]);
中国IT动力UaimAQhUEp1HpOa1e2Wqfzmw5
// get the tag options, like src="htt://". Here, s_tagTokOption is 'src'
中国IT动力UaimAQhUEp1HpOa1e2Wqfzmw5
and s_tagTokValue is '"http://"'
中国IT动力UaimAQhUEp1HpOa1e2Wqfzmw5
中国IT动力UaimAQhUEp1HpOa1e2Wqfzmw5
do {
中国IT动力UaimAQhUEp1HpOa1e2Wqfzmw5
$s_tagTokOption = strtoupper(strtok($s_tagOption[1], "="));
中国IT动力UaimAQhUEp1HpOa1e2Wqfzmw5
$s_tagTokValue = trim(strtok("="));
中国IT动力UaimAQhUEp1HpOa1e2Wqfzmw5
$a_html[$s_tagName][$i_arrayCounter][$s_tagTokOption] =
中国IT动力UaimAQhUEp1HpOa1e2Wqfzmw5
$s_tagTokValue;
中国IT动力UaimAQhUEp1HpOa1e2Wqfzmw5
$b_boolOptions = is_array(($s_tagOption=each($a_tag))) &&
中国IT动力UaimAQhUEp1HpOa1e2Wqfzmw5
$s_tagOption[1];
中国IT动力UaimAQhUEp1HpOa1e2Wqfzmw5
} while( $b_boolOptions );
中国IT动力UaimAQhUEp1HpOa1e2Wqfzmw5
}
中国IT动力UaimAQhUEp1HpOa1e2Wqfzmw5
}
中国IT动力UaimAQhUEp1HpOa1e2Wqfzmw5
return $a_html;
中国IT动力UaimAQhUEp1HpOa1e2Wqfzmw5
}
中国IT动力UaimAQhUEp1HpOa1e2Wqfzmw5
中国IT动力UaimAQhUEp1HpOa1e2Wqfzmw5
?>
php爱好 者站 http://www.phpfans.net php基础|php进阶|php模板.
中国IT动力UaimAQhUEp1HpOa1e2Wqfzmw5
/*
中国IT动力UaimAQhUEp1HpOa1e2Wqfzmw5
* parseHtml.php
中国IT动力UaimAQhUEp1HpOa1e2Wqfzmw5
* Author: Carlos Costa Jordao
中国IT动力UaimAQhUEp1HpOa1e2Wqfzmw5
* Email: [email protected]
*
中国IT动力UaimAQhUEp1HpOa1e2Wqfzmw5
* My notation of variables:
中国IT动力UaimAQhUEp1HpOa1e2Wqfzmw5
* i_ = integer, ex: i_count
中国IT动力UaimAQhUEp1HpOa1e2Wqfzmw5
* a_ = array, a_html
中国IT动力UaimAQhUEp1HpOa1e2Wqfzmw5
* b_ = boolean,
中国IT动力UaimAQhUEp1HpOa1e2Wqfzmw5
* s_ = string
中国IT动力UaimAQhUEp1HpOa1e2Wqfzmw5
*
中国IT动力UaimAQhUEp1HpOa1e2Wqfzmw5
* What it does:
中国IT动力UaimAQhUEp1HpOa1e2Wqfzmw5
* - parses a html string and get the tags
中国IT动力UaimAQhUEp1HpOa1e2Wqfzmw5
* - exceptions: html tags like <br> <hr> </a>, etc
中国IT动力UaimAQhUEp1HpOa1e2Wqfzmw5
* - At the end, the array will look like this:
中国IT动力UaimAQhUEp1HpOa1e2Wqfzmw5
* ["IMG"][0]["SRC"] = "xxx"
中国IT动力UaimAQhUEp1HpOa1e2Wqfzmw5
* ["IMG"][1]["SRC"] = "xxx"
中国IT动力UaimAQhUEp1HpOa1e2Wqfzmw5
* ["IMG"][1]["ALT"] = "xxx"
中国IT动力UaimAQhUEp1HpOa1e2Wqfzmw5
* ["A"][0]["HREF"] = "xxx"
中国IT动力UaimAQhUEp1HpOa1e2Wqfzmw5
*
中国IT动力UaimAQhUEp1HpOa1e2Wqfzmw5
*/
中国IT动力UaimAQhUEp1HpOa1e2Wqfzmw5
function parseHtml( $s_str )
中国IT动力UaimAQhUEp1HpOa1e2Wqfzmw5
{
中国IT动力UaimAQhUEp1HpOa1e2Wqfzmw5
$i_indicatorL = 0;
中国IT动力UaimAQhUEp1HpOa1e2Wqfzmw5
$i_indicatorR = 0;
中国IT动力UaimAQhUEp1HpOa1e2Wqfzmw5
$s_tagOption = "";
中国IT动力UaimAQhUEp1HpOa1e2Wqfzmw5
$i_arrayCounter = 0;
中国IT动力UaimAQhUEp1HpOa1e2Wqfzmw5
$a_html = array();
中国IT动力UaimAQhUEp1HpOa1e2Wqfzmw5
// Search for a tag in string
中国IT动力UaimAQhUEp1HpOa1e2Wqfzmw5
while( is_int(($i_indicatorL=strpos($s_str,"<",$i_indicatorR))) ) {
中国IT动力UaimAQhUEp1HpOa1e2Wqfzmw5
// Get everything into tag...
中国IT动力UaimAQhUEp1HpOa1e2Wqfzmw5
$i_indicatorL++;
中国IT动力UaimAQhUEp1HpOa1e2Wqfzmw5
$i_indicatorR = strpos($s_str,">", $i_indicatorL);
中国IT动力UaimAQhUEp1HpOa1e2Wqfzmw5
$s_temp = substr($s_str, $i_indicatorL, ($i_indicatorR-$i_indicatorL) );
中国IT动力UaimAQhUEp1HpOa1e2Wqfzmw5
$a_tag = explode( ' ', $s_temp );
中国IT动力UaimAQhUEp1HpOa1e2Wqfzmw5
// Here we get the tag's name
中国IT动力UaimAQhUEp1HpOa1e2Wqfzmw5
list( ,$s_tagName,, ) = each($a_tag);
中国IT动力UaimAQhUEp1HpOa1e2Wqfzmw5
$s_tagName = strtoupper($s_tagName);
中国IT动力UaimAQhUEp1HpOa1e2Wqfzmw5
// Well, I am not interesting in <br>, </font> or anything else like that...
中国IT动力UaimAQhUEp1HpOa1e2Wqfzmw5
// So, this is false for tags without options.
中国IT动力UaimAQhUEp1HpOa1e2Wqfzmw5
$b_boolOptions = is_array(($s_tagOption=each($a_tag))) && $s_tagOption[1];
中国IT动力UaimAQhUEp1HpOa1e2Wqfzmw5
if( $b_boolOptions ) {
中国IT动力UaimAQhUEp1HpOa1e2Wqfzmw5
// Without this, we will mess up the array
中国IT动力UaimAQhUEp1HpOa1e2Wqfzmw5
$i_arrayCounter = (int)count($a_html[$s_tagName]);
中国IT动力UaimAQhUEp1HpOa1e2Wqfzmw5
// get the tag options, like src="htt://". Here, s_tagTokOption is 'src'
中国IT动力UaimAQhUEp1HpOa1e2Wqfzmw5
and s_tagTokValue is '"http://"'
中国IT动力UaimAQhUEp1HpOa1e2Wqfzmw5
中国IT动力UaimAQhUEp1HpOa1e2Wqfzmw5
do {
中国IT动力UaimAQhUEp1HpOa1e2Wqfzmw5
$s_tagTokOption = strtoupper(strtok($s_tagOption[1], "="));
中国IT动力UaimAQhUEp1HpOa1e2Wqfzmw5
$s_tagTokValue = trim(strtok("="));
中国IT动力UaimAQhUEp1HpOa1e2Wqfzmw5
$a_html[$s_tagName][$i_arrayCounter][$s_tagTokOption] =
中国IT动力UaimAQhUEp1HpOa1e2Wqfzmw5
$s_tagTokValue;
中国IT动力UaimAQhUEp1HpOa1e2Wqfzmw5
$b_boolOptions = is_array(($s_tagOption=each($a_tag))) &&
中国IT动力UaimAQhUEp1HpOa1e2Wqfzmw5
$s_tagOption[1];
中国IT动力UaimAQhUEp1HpOa1e2Wqfzmw5
} while( $b_boolOptions );
中国IT动力UaimAQhUEp1HpOa1e2Wqfzmw5
}
中国IT动力UaimAQhUEp1HpOa1e2Wqfzmw5
}
中国IT动力UaimAQhUEp1HpOa1e2Wqfzmw5
return $a_html;
中国IT动力UaimAQhUEp1HpOa1e2Wqfzmw5
}
中国IT动力UaimAQhUEp1HpOa1e2Wqfzmw5
中国IT动力UaimAQhUEp1HpOa1e2Wqfzmw5
?>
php爱好 者站 http://www.phpfans.net php基础|php进阶|php模板.
相关阅读 更多 +