일부 코드에 대한 간략한 설명: 첫 번째 ~(<[^>]+?>)~si 이 정규 표현식은 <………>의 내용과 일치합니다. 간단히 말해서 모든 <태그>입니다. 두 번째 ~<([a-z0-9]+)[^/>]*?/>~si 이 정규식은 <……/>의 내용과 일치합니다. 세 번째 ~([a-z0-9]+)[^/>]*?>~si 와 같은 단일 폐쇄 태그입니다. 표현식은 과 일치합니다. 즉, 네 번째 ~<([a-z0-9]+)[^/>]*?>~si 와 같은 종료 태그는 <와 일치합니다. .. ...>. 이것은 첫 번째 태그와 다릅니다. html 태그에는
다섯 번째 태그~~si
설명할 필요 없음, HTML 주석
나머지는 소스코드, php 소스코드 첨부에서 보실 수 있습니다:
코드 복사 코드는 다음과 같습니다.
/**
* HTML을 가져와 자동으로 완성하고 닫습니다.
*
* 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("~([a-z0-9]+)[ ^/>] *?>~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($tag, 0, $length) - $len + 1 );
$result .= $str;
break
}
}
} while (!empty($tagStack)) {
$result . = '' . '>';
return $result;
}
/**
* 중국어 문자열 가져오기
*
* param $string string
*
* param $start 시작 위치
*
* param $length length
*
* param $charset 인코딩
*
* param $dot 추가 문자열
*/
함수 $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; += 3;
} elseif (240 <= $t && $t <= 247) {
$tn = 4
$n += 4; ;= $t && $t <= 251) {
$tn = 5;
$n += 5
} elseif ($t == 252 || $t == 253)
$tn = 6;
$n += 6;
} else {
$n++;
$noc++;
if ($noc > $length) {
$n -= $tn;
}
$strcut = substr($string, 0 , $n)
} else {
for($i = 0; $i $strcut .= ord($string[$i]) > 127 ? [++$i] : $string[$i];
}
}
$strcut .
}
/**
* 중국어와 영어를 포함한 문자열의 길이를 알아보세요.
*/
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 = 개수($ar[0]);
}
$length를 반환합니다.
}
$str = "
x1s测试 124"; echo subHtml($str); ?> 성명: 본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.