*/ public static function parseLines(string $raw): array { $raw = trim($raw); if ($raw === '') { return []; } $parts = preg_split('/\r\n|\r|\n/', $raw) ?: []; $lines = []; foreach ($parts as $part) { $line = trim((string) $part); if ($line === '') { continue; } if (strlen($line) > self::MAX_LINE_LENGTH) { $line = mb_substr($line, 0, self::MAX_LINE_LENGTH, 'UTF-8'); } $lines[] = $line; if (count($lines) >= self::MAX_LINES) { break; } } return $lines; } /** * 格式化为数据库存储(换行分隔) * * @param string|array $value */ public static function formatStorage($value): string { if (is_array($value)) { $lines = $value; } else { $lines = self::parseLines((string) $value); } return implode("\n", $lines); } /** * 供表单 textarea 回显 */ public static function formatDisplay(string $stored): string { $lines = self::parseLines($stored); return implode("\n", $lines); } /** * 从多行回复语中随机抽取一条(无配置时返回空字符串) */ public static function pickRandomLine(string $raw): string { $lines = self::parseLines($raw); if ($lines === []) { return ''; } return $lines[array_rand($lines)]; } }