Я попробовал назвать .txt файл в Windows 10 английскими буквами. Я написал как можно больше букв. Получилось 244. Больше не влезает.
Попробовал русскими буквами. Получилось тоже 244.
Попробовал emoji. Получилось 124.
А теперь к задаче.
От пользователя или из базы данных приходит строка. Мне нужно этой строкой назвать файл. Но если строка слишком длинная, то укоротить ее до нужного количества символов и подставить в конец (перед расширением файла) символ многоточия.
Как мне определить, насколько укоротить строку? Ведь в строке может быть сколько угодно emoji, русских букв, английских букв. А максимальная длина названия файла зависит от того, что за символы используются.
__________________
Вот код:
<?php
$filename1 = 'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb';
echo 'Случай 1: ' . saveToFile($filename1);
echo '<br>';
$filename2 = 'ТУТ 124 ГРУСТНЫХ СМАЙЛИКА, qna.habr.com не дает их написать';
echo 'Случай 2: ' . saveToFile($filename2);
function saveToFile($filename) {
$len = mb_strlen($filename);
if ($len > 240) {
$filename = mb_substr($filename, 0, 240);
}
$filename .= '.txt';
$result = fopen($_SERVER['DOCUMENT_ROOT'] . $filename, 'w');
return $result === false ? 'неудача' : 'успех';
}
В результате выведется такое;
Случай 1: успех
Случай 2: неудача