$width) { $line .= mb_substr($actual, 0, $width) . $break; $actual = mb_substr($actual, $width); } } $actual .= ' '; } } $line .= trim($actual); } return implode($break, $lines); } /** * Truncate URL in text-presentable format (i.e. "http://www.example.com" becomes "example.com") * * @param string|null $url * @param int $length */ public static function truncateUrl(?string $url, int $length = 40): string { if (null === $url) { return ''; } /** @noinspection HttpUrlsUsage */ $url = str_replace(['http://', 'https://', 'www.'], '', $url); return self::truncateText(rtrim($url, '/'), $length); } public static function getProgrammaticString(string $str): string { $result = mb_ereg_replace("([^\w\s\d\-_~,;\[\]\(\).])", '', $str); if (null === $result || false === $result) { throw new RuntimeException('Cannot parse input string.'); } $result = mb_ereg_replace("([\.]{2,})", '.', $result); if (null === $result || false === $result) { throw new RuntimeException('Cannot parse input string.'); } $result = str_replace(' ', '_', $result); return mb_strtolower($result); } public static function stringToUtf8(?string $original): string { $original ??= ''; $string = UTF8::encode('UTF-8', $original); $string = UTF8::fix_simple_utf8($string); return UTF8::clean( $string, true, true, true, true, true ); } }