【问题标题】:PHP Cut String On Character LimitPHP在字符限制上剪切字符串
【发布时间】:2019-02-01 19:32:59
【问题描述】:

我正在创建一个 博客,它使用 Faker 工厂来生成 演示数据。我有一个生成的 Post Model,它有一个包含随机生成的 HTML 的正文字段以及一个由 文本字段 创建的 从正文中剥离标签并限制接收到的数据为512个字符str_limit 工作正常,只是我需要将一个单词的 text 剪掉,同时将其保持在 512 limit 内。

这是我的工厂:

<?php

use Faker\Generator as Faker;

$factory->define(Provar\Forum\Post::class, function (Faker $faker) {

   $randomHTML = Purifier::clean($faker->randomHtml(2,3));

   $trimedHTML = strip_tags($randomHTML);

   return [
      'body' => $randomHTML,
      'text' => str_limit($trimedHTML, 509, '...')
   ];

});

感谢任何帮助。

【问题讨论】:

    标签: php laravel laravel-blade faker htmlpurifier


    【解决方案1】:

    你可以试试这样的东西,但这可能会打断最后一个字

    substr($trimedHTML, 0, 512) . '...'
    

    如果你不想删掉最后一个单词,你可能会做这样的事情,但不会总是给你正好 512 个字符,因为下一个单词可能会很大......

    $text=$trimedHTML;
    if (preg_match('/^.{1,512}\b/s', $trimedHTML, $match))
    {
        $text=$match[0] . ( strlen($match[0]) < strlen($trimedHTML) ? "..." : "" );
    }
    

    并使用 $text, 变量而不是 str_limit($trimedHTML, 509, '...')

    此代码实际上与此答案中的代码相同: Making sure PHP substr finishes on a word not a character 虽然这可能被认为是“另一个问题”所以......

    【讨论】:

    • 我不想删掉最后一句话。
    • 现在它会切断谢谢你的词,但它会添加省略号,无论是否达到限制。
    • if (preg_match('/^.{1,509}\b/s', $trimedHTML, $match)) { $text=$match[0]; if(strlen($text) &lt; 509) { $text += '...'; } }
    • 是的,在计算方面可能更便宜,因为你直接比较你的极限。
    猜你喜欢
    • 2013-01-14
    • 1970-01-01
    • 1970-01-01
    • 2017-06-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-04
    • 1970-01-01
    相关资源
    最近更新 更多