Home >Backend Development >PHP Tutorial >How to intercept html strings and automatically complete html tags in php_PHP tutorial

How to intercept html strings and automatically complete html tags in php_PHP tutorial

WBOY
WBOYOriginal
2016-07-13 10:01:29936browse

How to intercept html strings and automatically complete html tags in php

This article mainly introduces how to intercept html strings and automatically complete html tags in php. Very practical skills for html operations, which have certain reference value. Friends who need them can refer to them

The example in this article describes how PHP intercepts HTML strings and automatically completes HTML tags. Share it with everyone for your reference. The specific analysis is as follows:

Here is a summary of using php to intercept html strings and automatically complete html tags. In actual development, we often encounter it. Many people directly filter out html tags with strip_tags first, but only plain text is left, which is very readable. Sorry, here is a function, the code is as follows:

The code is as follows:

/**
* Intercept HTML and automatically complete and close
* @param $html
* @param $length
* @param $end
*/
function subHtml($html,$length) {
$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(!emptyempty($tagStack)){
$result .= '';
}
return $result;
}

/**
* Intercept Chinese string
* @param $string string
* @param $start starting position
* @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-xbf][x80-xbf]|[xf1-xf7][x80-xbf][x80-xbf][x80-xbf]/", $text, $ar);
$length=count($ar[0]);
}
return $length;
}
Example, the code is as follows:

Copy the code The code is as follows:

* @param HTML to be intercepted $str
* @param The number of interceptions $num
* @param Do you need to add more $more
* @return intercept string
*/
function phpos_chsubstr_ahtml($str,$num,$more=false)
{
$leng=strlen($str);
if($num>=$leng)
return $str;
$word=0;
$i=0; /**String pointer **/
$stag=array(array()); /**Stores the flag to start HTML **/
$etag=array(array()); /**Stores the flag that ends the HTML **/
$sp = 0;
$ep = 0;
while($word!=$num)
{
if(ord($str[$i])>128)
{
//$re.=substr($str,$i,3);
$i =3;
$word ;
}
else if ($str[$i]=='<')
{
if ($str[$i 1] == '!')
{
$i;
continue;
}

if ($str[$i 1]=='/')
{
$ptag=&$etag ;
$k=&$ep;
$i =2;
}
else
{
$ptag=&$stag;
$i =1;
$k=&$sp;
}

for(;$i<$leng;$i )
{
if ($str[$i] == ' ')
{
$ptag[$k] = implode('',$ptag[$k]);
$k ;
break;
}
if ($str[$i] != '>')
{
$ptag[$k][]=$str[$i];
continue;
}
else
{
$ptag[$k] = implode('',$ptag[$k]);
$k ;
break;
}
}
$i;
continue;
}
else
{
//$re.=substr($str,$i,1);
$word ;
$i;
}
}
foreach ($etag as $val)
{
$key1=array_search($val,$stag);
if ($key1 !== false) unset($stag[$key]);
}
foreach ($stag as $key => $val)
{
if (in_array($val,array('br','img'))) unset($stag[$key1]);
}
array_reverse($stag);
$ends = '';
$re = substr($str,0,$i).$ends;
if($more) $re.='...';
return $re;
}
PHP intercepts the string and generates the article summary. When we write a BLOG, we often need to display the previous part of the article, but we are afraid that improper truncation will destroy the closing tag and cause damage to the entire document structure. The code is as follows:

Copy the code The code is as follows:

function text_zhaiyao($text,$length){ //Article summary generation function $test: content $length: summary length
global $Briefing_Length;
mb_regex_encoding("UTF-8");
if(mb_strlen($text) <= $length ) return $text;
$Foremost = mb_substr($text, 0, $length);
$re = "<(/?)
(P|DIV|H1|H2|H3|H4|H5|H6|ADDRESS|PRE|TABLE|TR|TD|TH|INPUT|SELECT|TEXTAREA|OBJECT|A|UL|OL|LI|
BASE|META|LINK|HR|BR|PARAM|IMG|AREA|INPUT|SPAN)[^>]*(>?)";
$Single = "/BASE|META|LINK|HR|BR|PARAM|IMG|AREA|INPUT|BR/i";

$Stack = array(); $posStack = array();

mb_ereg_search_init($Foremost, $re, 'i');

while($pos = mb_ereg_search_pos()){
$match = mb_ereg_search_getregs();
/* [Child-matching Formulation]:

$matche[1] : A "/" charactor indicating whether current "<...>" Friction is
Closing Part
$matche[2] : Element Name.
$matche[3] : Right > of a "<...>" Friction
*/
if($match[1]==""){
$Elem = $match[2];
if(mb_eregi($Single, $Elem) && $match[3] !=""){
continue;
}

I hope this article will be helpful to everyone’s PHP programming design.

www.bkjia.comtruehttp: //www.bkjia.com/PHPjc/971935.htmlTechArticleHow to intercept html strings and automatically complete html tags with php. This article mainly introduces how to intercept html strings with php And the method of automatically completing html tags is a very practical skill for php to operate html...
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