截取UTF-8字符串函数,中文长度当作2处理

2年前 2018-12-28 10:25:56 阅读量:865,日阅读:1,周阅读:2,月阅读:24 0条
/**
 * 移除html标签
 * @param string $str
 * @return string
 */
function removeHtml($str)
{
    if ($str != '') {
        $str = str_replace('<', '<', $str);
        $str = str_replace('>', '>', $str);
        $str = str_replace(' ', '', $str);
        $str = str_replace('"', '', $str);
        $str = str_replace(' ', '', $str);
        $str = str_replace(''', '', $str);
        $str = str_replace('&', '', $str);
        $str = str_replace(''', '', $str);
        $str = str_replace('&', '', $str);
        $str = str_replace('emsp;', '', $str);
        $str = strip_tags($str);
    }
    return $str;
}
/**
 * 截取UTF-8字符串函数,中文长度当作2处理
 *
 * @param $str 字符串
 * @param $max 截取长度
 * @param $ex  截取长度后追加,如:...
 */
function cutStr($str, $max, $ex = '')
{
    $str = removeHtml($str);
    $str = str_replace(" ", "", $str);
    $str = str_replace(" ", "", $str);
    $str = str_replace("\n", "", $str);
    $str = str_replace("\t", "", $str);
    if ($max < 1 || strlen($str) <= $max) {
        return $str;
    }
    $len = strlen($str);
    $max = min($max, $len);
    $ex_length = strlen($ex) + 1;
    if ($max < 1) {
        return $str;
    }
    $pos = 0;
    $cut_pos = 0;
    for ($i = $max - 1; $i > 0 && $pos < $len; $i--) {
        $char = ord($str[$pos]);
        if ($char < 128) {
            $pos++;
        } elseif ($char >= 224 && $char <= 239) {
            $i--;
            $pos += 3;
        } elseif ($char >= 192 && $char <= 223) {
            $pos += 2;
        }
        if ($i <= $ex_length && 0 == $cut_pos) {
            $cut_pos = $pos;
        }
    }
    if ($pos >= $len) {
        return $str;
    }
    return $cut_pos ? substr($str, 0, $cut_pos) . $ex : substr($str, 0, $pos) . $ex;
}
标签: PHP 函数
顶一下
(1)
100%
踩一下
(0)
0%

非特殊说明,本博所有文章均为博主原创。

评论0发表评论