PHPはHTMLコードをインターセプトし、HTMLタグの終了問題を考慮します
/* 概要を生成します
* @param (文字列) $body
*テキスト
* @param (int) $size
* 概要の長さ
* @param (int) $format
* 入力フォーマットID
*/
関数 blog_summary($body, $size, $format = NULL){
$_size = mb_strlen($body, "utf-8');
if($_size
// 入力形式に PHP フィルターがあります
/*
if(!isset($format) && filter_is_php($format)){
$body を返します;
}
*/
$strlen_var = strlen($body);
//HTMLタグは含まれません
if(strpos($body, '<') === false){
mb_substr($body, 0, $size) を返します
}
// 切り捨てフラグ、優先度が含まれます
if($e = strpos($body, '')){
mb_substr($body, 0, $e) を返します。
}
// HTML コードタグ
$html_tag = 0;
// 概要文字列
$summary_string = '';
/**
* 配列は、概要範囲内に表示される HTML タグを記録するために使用されます
* 開始と終了はそれぞれ左と右のキー名で保存されます
* 文字列が
a の場合、p が閉じていないと仮定します
* 配列は: array('left' => array('h3', 'p', 'b'), 'right' => 'b', 'h3');
* 完全な HTML タグ、 <%、およびその他の言語タグのみ。予測できない結果が生成されます
*/
$html_array = array('left' => array(), 'right' => array());
for($i = 0; $i
If(!$size){
休憩
}
$current_var = substr($body, $i, 1);
If($current_var == '<'){
// HTMLコードが始まります
$html_tag = 1;
$html_array_str = '';
}else if($html_tag == 1){
// HTML コードの終わり
If($current_var == '>'){
/**
*
img src="" / > などの先頭と末尾のスペースを削除します。
*/
$html_array_str = トリム($html_array_str);
/**
* 最後の文字が / であるかどうかを確認します。そうであれば、ラベルは閉じられており、記録されません
*/
If(substr($html_array_str, -1) != '/'){
// 最初の文字が / であるかどうかを判断し、そうであれば、それを正しい単位に置きます
$f = substr($html_array_str, 0, 1);
if($f == '/'){
// 取り除く /
$html_array['right'][] = str_replace('/', '', $html_array_str);
}else if($f != '?'){
// ? であるかどうかを判断し、そうである場合は PHP コードであるため、
をスキップします
/**
*
など
If(strpos($html_array_str, ' ') !== false){
// 2 つのユニットに分割します。
などの HTML タグになります。
* 小文字に変換します
*/
$html_array['left'][] = strto lower($html_array_str);
}
}
// 文字列をリセット
$html_array_str = '';
$html_tag = 0;
}その他{
/**
* < の間の文字を文字列に合成します
* HTMLタグを抽出するために使用されます
*/
$html_array_str .= $current_var
}
}その他{
// 非 HTML コードのみがカウントされます
—$サイズ
}
$ord_var_c = ord($body{$i});
スイッチ (真) {
case (($ord_var_c & 0xE0) == 0xC0):
// 2バイト
$summary_string .= substr($body, $i, 2);
$i += 1;
休憩
case (($ord_var_c & 0xF0) == 0xE0):
// 3バイト
$summary_string .= substr($body, $i, 3);
$i += 2;
休憩
case (($ord_var_c & 0xF8) == 0xF0):
// 4バイト
$summary_string .= substr($body, $i, 4);
$i += 3;
休憩
case (($ord_var_c & 0xFC) == 0xF8):
// 5バイト
$summary_string .= substr($body, $i, 5);
$i += 4;
休憩
case (($ord_var_c & 0xFE) == 0xFC):
// 6バイト
$summary_string .= substr($body, $i, 6);
$i += 5;
休憩
デフォルト:
// 1バイト
$summary_string .= $current_var
}
}
if($html_array['left']){
/**
※左右のHTMLタグを比較し、足りない場合は補完してください
*/
/**
※左の順番を入れ替えて、補足の順番はhtmlの出現順と逆にしてください
* * 完成する文字列が
abc
の場合
※補充の順序は