PHP在字符数限制上切字符串

时间:2018-08-27 09:28:13

标签: php laravel laravel-blade faker htmlpurifier

我正在创建一个博客,该博客使用 Faker 工厂生成演示数据。我有一个生成的 Post模型,该文本具有一个包含随机生成的 HTML 的正文字段以及一个由<从正文中强行剥离标签,并限制将收到的数据限制为 512个字符 str_limit 可以正常工作,只是我需要将一个单词上的文本剪切掉,同时将其保持在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, '...')
   ];

});

感谢您的帮助。 <3

1 个答案:

答案 0 :(得分:3)

您可以尝试使用类似的方法,但这可能会缩短单词的难度

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 尽管这可能被认为是“另一个问题”,所以...