Задать вопрос
@eugene159

Как через PHP определить, подойдет ли длина строки для названия файла?

Я попробовал назвать .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: неудача
  • Вопрос задан
  • 197 просмотров
Подписаться 1 Простой 4 комментария
Ответ пользователя Дмитрий К ответам на вопрос (4)
iMedved2009
@iMedved2009
Не люблю людей
Ответ написан
Комментировать