Home  >  Article  >  Backend Development  >  PHP makes HTML tags automatically complete closed function codes_PHP tutorial

PHP makes HTML tags automatically complete closed function codes_PHP tutorial

WBOY
WBOYOriginal
2016-07-21 15:15:30817browse

Briefly explain some codes:
The first ~(<[^>]+?>)~si
This regular expression matches the content in <…………>. Simply put, all .
The second ~<([a-z0-9]+)[^/>]*?/>~si
This regular expression matches the content in <……/>. It is a single closed tag such as

The third ~]*?>~si
This regular expression matches . That is, the end tag such as
the fourth ~<([a-z0-9]+)[^/>]*?>~si
matches <... ...>. This is different from the first one. This one is a real html tag, because html tags only have numbers and letters, such as:


The fifth one~~si
No need to explain, HTMl comments
The rest can be seen in the source code, PHP source code attachment:

Copy code The code is as follows:

/**
* Take HTML and automatically complete and close
*
* param $html
*
* param $length
*
* param $end
*/
function subHtml($html, $length=50) {
$ result = '';
$tagStack = array();
$len = 0;
$contents = preg_split("~(<[^>]+?>)~si", $html, -1, PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE);
foreach($contents as $tag) {
if (trim($tag) == "") continue;
if (preg_match("~< ;([a-z0-9]+)[^/>]*?/>~si", $tag)) {
$result .= $tag;
} else if (preg_match( "~]*?>~si", $tag, $match)) {
if ($tagStack[count($tagStack) -1] == $match[1]) {
array_pop($tagStack);
$result .= $tag;
}
} else if (preg_match("~<([ a-z0-9]+)[^/>]*?>~si", $tag, $match)) {
array_push($tagStack, $match[1]);
$result .= $tag;
} else if (preg_match("~~si", $tag)) {
$result .= $tag;
} else {
if ($len + mstrlen($tag) < $length) {
$result .= $tag;
$len += mstrlen($tag);
} else {
$str = msubstr($tag, 0, $length - $len + 1);
$result .= $str;
break;
}
}
} while (!empty($tagStack)) {
$result .= '';
}
return $result;
}
/**
* Get Chinese string
*
* param $string string
*
* param $start starting bit
*
* param $length length
*
* param $charset encoding
*
* param $dot additional string
*/
function msubstr($string, $start, $length, $dot = '', $charset = 'UTF-8') {
$string = str_replace(array ('&', '"', '<', '>', ' '), array('&', '"', '<', '>', ' '), $string) ;
if (strlen($string) <= $length) {
return $string;
}
if (strtolower($charset) == 'utf-8') {
$n = $tn = $noc = 0;
while ($n < strlen($string)) {
$t = ord($string[$n]);
if ($ t == 9 || $t == 10 || (32 <= $t && $t <= 126)) {
$tn = 1;
$n++;
} elseif ( 194 <= $t && $t <= 223) {
$tn = 2;
$n += 2;
} elseif (224 <= $t && $t <= 239) {
$tn = 3;
$n += 3;
} elseif (240 <= $t && $t <= 247) {
$tn = 4;
$n += 4;
} elseif (248 <= $t && $t <= 251) {
$tn = 5;
$n += 5;
} elseif ($t == 252 || $t == 253) {
$tn = 6;
$n += 6;
} else {
$n++;
}
$noc++;
if ($noc >= $length) {
break;
}
}
if ($noc > $length) {
$n -= $tn;
}
$strcut = substr($string, 0, $n);
} else {
for($i = 0; $i < $length; $ i++) {
$strcut .= ord($string[$i]) > 127 ? $string[$i] . $string[++$i] : $string[$i];
}
}
return $strcut . $dot;
}
/**
* Get the length of the string, including Chinese and English.
*/
function mstrlen($str, $charset = 'UTF-8') {
if (function_exists('mb_substr')) {
$length = mb_strlen($str, $charset);
} elseif (function_exists('iconv_substr')) {
$length = iconv_strlen($str , $charset);
} else {
preg_match_all("/[x01-x7f]|[xc2-xdf][x80-xbf]|xe0[xa0-xbf][x80-xbf]|[xe1- xef][x80-xbf][x80-xbf]|xf0[x90-xbf][x80-f][x80-xbf]|[xf1-xf7][x80-xbf][x80-xbf][x80-xbf] /", $text, $ar);
$length = count($ar[0]);
}
return $length;
}
$str = "x1stest124";
echo subHtml($str);
?>

www.bkjia.comtruehttp: //www.bkjia.com/PHPjc/326092.htmlTechArticleBrief explanation of some codes: The first ~([^]+?)~si This regular expression matches... Contents in . Simply put, all labels. The second ~([a-z0-9]+)[^/]*?/~si This regular expression matches...
Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn