我正在创建一个博客,使用一个伪造工厂来生成演示数据。我有一个post模型,它生成了一个body字段,其中包含随机生成的html,还有一个文本字段,通过从body中剥离标记并将接收到的数据限制为512个字符来创建。str_limit可以很好地工作,只是我需要在一个单词上切断文本,同时将其保持在512的限制。这是我的工厂:<?phpuse 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, '...') ];});如有任何帮助,我们将不胜感激。 最佳答案 你可以试试这样的东西,但这可能会断然拒绝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虽然这可能被认为是“另一个问题”,所以…关于php - PHP在字符数限制上切字符串,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52036308/ 10-11 01:35