PHP 限制输出内容的字数

一、contentWordNumLimit($content, $maxWordNum)

1 作用描述:内容格式化(英文单双引号替换为中文,回车换行替换为html中的br标签,\n替换为空格), 限制输出内容的字数,超过的部分用省略号代替。

2 参数:

    $content:要处理的字符串

    $maxWordNum:要限制的字数。正值,限制的字数不超过该值;负值,不限制字数;默认值是  -1

二、PHP函数介绍

1 nl2br(string)

(1)函数作用:在字符串中的每个新行(\n)之前插入HTML换行符(<br/>).

(2)参数介绍:
    string:必需。规定要检查的字符串。

2 preg_replace(miexed $pattern, mixed $replacement, mixed $subject[, int $limit = -1[, int &$count]])

(1)函数作用:执行一个正则表达式的替换和搜索。搜索subject中匹配pattern的部分,以replacement进行替换。返回值:如果subject是一个数组,preg_replace()返回一个数组,其他情况下返回一个字符串。如果匹配被查找到,替换后的subject被返回;其他情况下,返回没有改变的subject。如果发生错误,返回null;如果发生错误,返回NULL。

(2)参数介绍”

    pattern:要搜索的模式。可以是一个字符串或字符串数组。

    replacement:用于替换的字符串或字符串数组。如果这个参数是一个字符串,并且pattern是一个数组,那么所有的模式都使用这个字符串进行替换。如果pattern和replacement都是数组,每个pattern使用replacement中对应的元素进行替换。如果replacement中的元素比pattern中的少,多出来的pattern使用空字符串进行替换。

    replacement中可以包含后项引用\\n或(php 4.0.4以上可以用)$n,语法上首选后者。每个这样的引用将被匹配到第n个捕获到的文本替换。n可以是0-99,\\0和$0代表完整的模式匹配文本。捕获子组的序号计数方式为:代表捕获子组的左括号从左到右,从1开始数。。如果要在replacement中使用反斜线,必须使用4个("\\\\\",译注:因为这首选是php字符串,经过转义后,是两个,再经过正则表达式引擎后才被认为是一个原文反斜线)。

    当在替换模式先工作并且后项引用后面紧跟着需要时另外一个数组(比如:在一个匹配模式后紧接着增加一个原文数字),不能使用\\1这样的语法来描述后项引用。比如,\\11经会使用preg_replace()不能理解你希望的是一个\\1后项引用紧跟着一个原文1,是爱上一\\11后项引用后面不跟任何东西。这种情况下解决方案是使用\${1}1。这样子创建了一个独立的$1后项引用,一个独立的原文1.

    subject:要进行搜索和替换的字符串或字符串数组。如果subject是一个数组,搜索和替换会在subject的每一个元素上进行,并且返回值也会是一个数组。

    limit:每个模式在每个subject上进行替换的最大次数。默认是-1(无限)。

    count:如果指定,将会被填充为完成的替换次数。

3 mb_substr(string $str, int $start[, int $length [, string $encoding]])

(1)函数作用:获取字符串的部分。根据字符数执行一个多字节安全的substr()操作。位置从str的开始位置进行计数。第一个字符的位置是0,第二个字符位置是1,以此类推。

(2)参数介绍:

    str:从该string中提取字符串

    start:str中要使用的第一个字符的位置。
    
    length:str中药使用的最大字符数。

    encoding:encoding参数为字符编码。如果省略,则使用内部字符编码。

三、 PHP函数

<!-- lang: php -->
<?php 
<!-- lang: php -->
    header("Content-type: text/html; charset=utf-8");
<!-- lang: php -->
    /**
<!-- lang: php -->
     *
<!-- lang: php -->
     *@param string $content 内容
<!-- lang: php -->
     *@param int $maxWordNum 最多输出的字数
<!-- lang: php -->
    */
<!-- lang: php -->
    function contentWordNumLimit($content, $maxWordNum = -1){
<!-- lang: php -->
        $count = 0;
<!-- lang: php -->

<!-- lang: php -->
        $patterns = array();
<!-- lang: php -->
        $patterns[0] = '/\'/';    //中文单引号
<!-- lang: php -->
        $patterns[1] = '/\"/';    //中文双引号
<!-- lang: php -->
        $patterns[2] = '/\n/';
<!-- lang: php -->

<!-- lang: php -->
        $replacements = array();
<!-- lang: php -->
        $replacements[0] = '‘';
<!-- lang: php -->
        $replacements[1] = '“';
<!-- lang: php -->
        $replacements[2] = ' ';
<!-- lang: php -->

<!-- lang: php -->
        if($maxWordNum > 0 && mb_strlen($content, 'utf-8') > $maxWordNum){
<!-- lang: php -->
                $content = nl2br(mb_substr($content, 0, $maxWordNum, 'utf-8').'......');
<!-- lang: php -->
                $content = preg_replace($patterns, $replacements, $content);
<!-- lang: php -->
        }else{
<!-- lang: php -->
            $content = preg_replace($patterns, $replacements, $content);
<!-- lang: php -->
        }
<!-- lang: php -->
        rerturn $content;
<!-- lang: php -->
    }
<!-- lang: php -->

<!-- lang: php -->
$content = "春江潮水连海平, 海上明月共潮生。\r\n滟滟)随波千万里, 何处春江无月明。\r\n江流宛转绕芳甸, 月照花林皆似霰。\r\n空里流霜不觉飞, 汀上白沙看不见。\r\n江天一色无纤尘, 皎皎空中孤月轮。\r\n江畔何人初见月? 江月何年初照人?\r\n人生代代无穷已, 江月年年望(一作“只”)相似。\r\n不知江月待何人, 但见长江送流水。\r\n白云一片去悠悠, 青枫浦上不胜愁。\r\n谁家今夜扁舟子? 何处相思明月楼?\r\n可怜楼上月徘徊, 应照离人妆镜台。\r\n玉户帘中卷不去, 捣衣砧上拂还来。\r\n此时相望不相闻, 愿逐月华流照君。\r\n鸿雁长飞光不度, 鱼龙潜跃水成文。\r\n昨夜闲潭梦落花, 可怜春半不还家。\r\n江水流春去欲尽, 江潭落月复西斜。(古音xiá)\r\n斜月沉沉藏海雾, 碣石潇湘 无限路。\r\n不知乘月几人归, 落月摇情满江树。";
<!-- lang: php -->
$limit = 100;
<!-- lang: php -->
$newContent =   contentWordNumLimit($content, $limit);
<!-- lang: php -->
echo '《春江花月夜》原诗句:<br>'.$content;
<!-- lang: php -->
echo '<br>';
<!-- lang: php -->
echo '~~~~~~~~~~~~~~~~~~';
<!-- lang: php -->
echo '<br>';
<!-- lang: php -->
echo '《春江花月夜》限制100字诗句:<br>'.$newContent;
<!-- lang: php -->
?>

运行结果:
《春江花月夜》原诗句:
春江潮水连海平, 海上明月共潮生。 滟滟)随波千万里, 何处春江无月明。 
江流宛转绕芳甸, 月照花林皆似霰。 空里流霜不觉飞, 汀上白沙看不见。
 江天一色无纤尘, 皎皎空中孤月轮。 江畔何人初见月? 江月何年初照人? 
人生代代无穷已, 江月年年望(一作“只”)相似。 不知江月待何人, 但见长江送流水。 
白云一片去悠悠, 青枫浦上不胜愁。 谁家今夜扁舟子? 何处相思明月楼? 
可怜楼上月徘徊, 应照离人妆镜台。 玉户帘中卷不去, 捣衣砧上拂还来。 
此时相望不相闻, 愿逐月华流照君。 鸿雁长飞光不度, 鱼龙潜跃水成文。 
昨夜闲潭梦落花, 可怜春半不还家。 江水流春去欲尽, 江潭落月复西斜。
(古音xiá) 斜月沉沉藏海雾, 碣石潇湘 无限路。 不知乘月几人归, 落月摇情满江树。
~~~~~~~~~~~~~~~~~~
《春江花月夜》限制100字诗句:
春江潮水连海平, 海上明月共潮生。
滟滟)随波千万里, 何处春江无月明。
江流宛转绕芳甸, 月照花林皆似霰。
空里流霜不觉飞, 汀上白沙看不见。
江天一色无纤尘, 皎皎空中孤月轮。
江畔何人......

转载于:https://my.oschina.net/syc2013/blog/175435

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值