Php版本的GetElementById
<?php /** * Created by PhpStorm. * User: c.yu * Date: 14-8-2 * Time: 下午11:11 */ function GetElementById($content, $id, $return_type = ‘substr‘) { if (preg_match(‘@<([a-z]+)[^>]*id=[\"\‘]?‘ . $id . ‘[\"\‘]?[^>]*>@i‘, $content, $res)) { $start = strpos($content, $res[0]); $end = 0; $start_tag = ‘<‘ . $res[1]; // 开始标签 $end_tag = ‘</‘ . $res[1] . ‘>‘; // 结束标签 $lastStart_pos = strrpos($content, $start_tag); $lastEnd_pos = strrpos($content, $end_tag); //储存所有开始标签和结束标签的pos $startArr = array(); $endArr = array(); $next_pos = 0; while ($next_pos < $lastStart_pos) { $p_start = stripos($content, $start_tag, $next_pos); $startArr[] = $p_start; $next_pos = $p_start + 1; } $next_pos = 0; while ($next_pos < $lastEnd_pos) { $p_end = stripos($content, $end_tag, $next_pos); $endArr[] = $p_end; $next_pos = $p_end + 1; } //开始标签数量不等于结束标签数量,退出 if (count($startArr) != count($endArr)) { exit(‘调用getElementById时出现错误::<font color="red">您的标签‘ . htmlspecialchars("{$start_tag} id=‘{$id}‘>") . ‘ 在使用时根本没有闭合,不符合xhtml,系统强制停止匹配</font>.‘); } //匹配不到开始标签 if(count($startArr)<=0){ return ‘‘; } //如果开始标签全文只有一个 if(count($startArr)==1){ $secondary = substr($content, $startArr[0], $endArr[0] + strlen($end_tag) -$startArr[0]); return $secondary; } //在所有开始标签下标的集合中找到指定id的开始标签的下标 $startIndex = 0; $startCount = 1; for ($i = 0; $i < count($startArr); $i++) { if ($startArr[$i] === $start) { $startIndex = $i; break; } } //如果指定id的开始标签的下标是数组的最后一个 if($startIndex === count($startArr)-1){ $secondary = substr($content, $startArr[$startIndex], $endArr[$startIndex] + strlen($end_tag) -$startArr[$startIndex]); return $secondary; } //指定id开始标签的下一个开始标签的pos和下一个开始标签的pos之间, //能够配对,取结束标签的pos //<start1><end1><start2> start1和下一个start2之间end的数量是1,start的数量也是1,取end1的pos //<start1><start2><end2><end1><start3> start1和start3之间end的数量是2,start的数量也是2,取end1的pos $startNext = $startArr[$startIndex + $startCount]; $endCount = getEndCount($start, $startNext, $endArr,$startCount,$end); while ($endCount < $startCount) { $startCount++; $startNext = $startArr[$startIndex + $startCount]; $endCount = getEndCount($start, $startNext, $endArr,$startCount,$end); } $secondary = substr($content, $start, $end + strlen($end_tag) -$start); return $secondary; } else { return false; } } function getEndCount($start, $startNext, $endArr,$startCount,&$endPos) { $endCount = 0; for ($j = 0; $j < count($endArr) - 1; $j++) { if ($endArr[$j] < $startNext && $endArr[$j] > $start) { $endCount++; if($endCount === $startCount){ $endPos =$endArr[$j]; } } } return $endCount; }
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。