1 0 0

xiunobbs修罗论坛 帖子页加Description描述的方法

admin
2024-09-10 16:31:08 143

找到/view/htm/thread.htm

在最上面也就是<?php include _include(APP_PATH.'view/htm/header.inc.htm');?>前,新增下面代码:

<?php
function substrWithPunctuation($str, $maxLen = 100, $startPos = 60, $punctuations = ['.', '!','。']) {  
    $len = mb_strlen($str, 'UTF-8'); // 获取字符串长度(按字符)  
    $subStr = '';    
    if ($len <= $maxLen) {  
        // 如果字符串长度小于等于最大长度,直接返回  
        return $str;  
    }    
    // 从startPos开始向后查找标点符号  
    $found = false;  
    for ($i = $startPos; $i < $len; $i++) {  
        $char = mb_substr($str, $i, 1, 'UTF-8'); // 取出当前字符  
  
        // 检查字符是否为指定的标点符号  
        if (in_array($char, $punctuations)) {  
            // 如果找到标点符号,则截取从字符串开始到该标点符号之前的所有字符  
            $subStr = mb_substr($str, 0, $i + mb_strlen($char, 'UTF-8'), 'UTF-8');  
            $found = true;  
            break;  
        }  
    }    
    // 如果没有找到标点符号,则直接截取前maxLen个字符  
    if (!$found) {  
        $subStr = mb_substr($str, 0, 80, 'UTF-8');  
    }    
    // 如果截取后的字符串末尾是空格,则去除空格(这一步是可选的,取决于您的具体需求)  
    $subStr = rtrim($subStr);    
    return $subStr;  
}
$description = $first['message_fmt'];    
$description = strip_tags($description);
$description = substrWithPunctuation($description);
$header['description'] = $description;
?>

其中substrWithPunctuation是把帖子中的内容从60字符串开始找到.或!或。的位置截取
修改后上传后台更新缓存就可


最新回复 (1)
  • admin 2024-11-20 16:16:46
    0 引用 2

    代码优化:
    1、新增去除多余的换行及空格符号:

    <?php
    function    substrWithPunctuation($str,    $maxLen    =    100,    $startPos    =    60,    $punctuations    =    ['.',    '!','。'])    {     
                    $len    =    mb_strlen($str,    'UTF-8');    //    获取字符串长度(按字符)     
                    $subStr    =    '';             
                    if    ($len    <=    $maxLen)    {     
                                    //    如果字符串长度小于等于最大长度,直接返回     
                                    return    $str;     
                    }             
                    //    从startPos开始向后查找标点符号     
                    $found    =    false;     
                    for    ($i    =    $startPos;    $i    <    $len;    $i++)    {     
                                    $char    =    mb_substr($str,    $i,    1,    'UTF-8');    //    取出当前字符     
         
                                    //    检查字符是否为指定的标点符号     
                                    if    (in_array($char,    $punctuations))    {     
                                                    //    如果找到标点符号,则截取从字符串开始到该标点符号之前的所有字符     
                                                    $subStr    =    mb_substr($str,    0,    $i    +    mb_strlen($char,    'UTF-8'),    'UTF-8');     
                                                    $found    =    true;     
                                                    break;     
                                    }     
                    }             
                    //    如果没有找到标点符号,则直接截取前maxLen个字符     
                    if    (!$found)    {     
                                    $subStr    =    mb_substr($str,    0,    80,    'UTF-8');     
                    }             
                    //    如果截取后的字符串末尾是空格,则去除空格(这一步是可选的,取决于您的具体需求)     
                    $subStr    =    rtrim($subStr);             
                    return    $subStr;     
    }
    $description    =    $first['message_fmt'];             
    $description    =    strip_tags($description);
    $description    =    str_replace(["\r",    "\n",    "\t",    '    '],    '',    $description);
    $description    =    substrWithPunctuation($description);
    $header['description']    =    $description;
    ?>

请先登录后发表评论!

返回
请先登录后发表评论!