PHP вырезать строку на ограничение символов - PullRequest
0 голосов
/ 27 августа 2018

Я создаю Блог , который использует Faker Factory для генерации Демо-данных .У меня есть Пост-модель , которая генерируется, которая имеет поле тела, которое содержит случайно сгенерированный HTML , а также текстовое поле , которое создается зачисткой теги из тела и ограничение полученных данных 512 символов . str_limit работает нормально, просто мне нужно обрезать текст на слове, сохраняя его в пределах 512 предел .

Это моя фабрика:

<?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 </p>

1 Ответ

0 голосов
/ 27 августа 2018

Вы можете попробовать что-то вроде этого, но это может сократить последнее слово

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, '...')

Этот код буквально совпадает с кодом в этом ответе: Убедиться, что PHP substr заканчивается на слове, а не на символе Хотя это можно считать «другим вопросом», так что ...

...