Функции строк Albireo CMS
Функция checkStr
Проверяет входное значение и классифицирует его по трем состояниям: «не задано» (возвращает null), «отключено» (возвращает false) и «включено» (возвращает true). Это особенно полезно для обработки конфигурационных параметров, где отсутствие опции имеет иной смысл, чем её явное отключение.
Сигнатура
function checkStr(mixed $str): ?bool
Аргументы
- mixed
$str - Входное значение для проверки. Может быть строкой,
null,falseили пустым значением.
Результат
Возвращает одно из трех значений:
null— Если входное значение$strстрого равноnull,falseили пустой строке''. Это означает, что опция не задана.false— Если$strпосле удаления пробелов равно'0','-'или (без учета регистра)'false'. Это означает, что опция явно отключена.true— Во всех остальных случаях (например, '1', 'on', 'любой текст'). Это означает, что опция задана и активна.
Примеры использования
Пример 1: Базовая проверка трех состояний
Демонстрация работы функции с разными типами входных данных.
// Состояние «не задано»
var_dump(checkStr(null)); // NULL
var_dump(checkStr('')); // NULL
// Состояние «отключено»
var_dump(checkStr('0')); // bool(false)
var_dump(checkStr(' - ')); // bool(false)
var_dump(checkStr('False')); // bool(false)
// Состояние «включено»
var_dump(checkStr('1')); // bool(true)
var_dump(checkStr('активно')); // bool(true)
var_dump(checkStr('2024-01-01')); // bool(true)
Пример 2: Обработка опционального параметра
Частый сценарий: нужно установить значение по умолчанию, если опция не задана, но учесть её явное выключение.
// Получаем значение опции 'show_sidebar' со страницы.
// Если опции нет, getPageData вернет null.
$mode = checkStr(getPageData('show_sidebar', null));
// Устанавливаем значение по умолчанию (true), если опция не задана.
// В противном случае используем результат проверки (true или false).
$showSidebar = is_null($mode) ? true : $mode;
if ($showSidebar) {
echo 'Показываем сайдбар.';
} else {
echo 'Сайдбар скрыт.';
}
Пример 3: Использование в условных конструкциях
Важно использовать строгое сравнение (=== или !==) для точного определения состояния.
$data = ['draft' => '1', 'sitemap' => '0', 'comments' => '-'];
// Пропускаем только те страницы, которые являются черновиками (draft: 1)
// checkStr($data['draft']) вернет true
if (checkStr($data['draft']) === true) {
// continue; // пропустить
}
// Пропускаем страницы, явно исключенные из карты сайта (sitemap: 0)
// checkStr($data['sitemap']) вернет false
if (checkStr($data['sitemap']) === false) {
// continue; // пропустить
}
// Выполняем действие, если комментарии НЕ отключены (то есть, включены или не заданы)
// checkStr($data['comments']) вернет false
if (checkStr($data['comments']) !== false) {
// render_comments();
}
Примечания
- Функция применяет
trim()к строке, поэтому пробелы по краям не влияют на результат. - Проверка на слово
'false'является регистронезависимой.
Функция convertDate
Преобразует строковое представление даты, понятное для функции PHP strtotime(), в любой другой заданный формат. Функция служит безопасной оберткой, которая возвращает пустую строку в случае, если исходную дату невозможно распознать, предотвращая ошибки.
Сигнатура
function convertDate(string $inputDate, string $outputFormat = 'd-m-Y'): string
Аргументы
- string
$inputDate - Входящая строка с датой. Должна быть в формате, который может быть обработан функцией PHP
strtotime(). Примеры:'2024-05-21','now','+1 day','last Monday'. - string
$outputFormat(необязательный) - Строка формата для выходной даты, использующая символы, принятые в функции
date(). По умолчанию используется'd-m-Y'.
Результат
Возвращает отформатированную дату в виде строки (string) или пустую строку (''), если не удалось преобразовать исходную дату.
Примеры использования
Пример 1: Стандартное преобразование
Преобразование даты из формата ISO 8601 в формат «день-месяц-год».
$isoDate = '2024-12-31'; $ruDate = convertDate($isoDate, 'd.m.Y'); echo $ruDate; // Выведет: 31.12.2024
Пример 2: Использование относительных дат
Функция легко работает с относительными датами, которые понимает strtotime.
$tomorrow = convertDate('+1 day', 'l, F j, Y');
// Выведет завтрашнюю дату, например: "Wednesday, May 22, 2024"
echo $tomorrow;
Пример 3: Преобразование даты и времени
Извлечение только времени из полной строки даты.
$fullDateTime = '2023-10-26 22:05:15'; $timeOnly = convertDate($fullDateTime, 'H:i'); echo $timeOnly; // Выведет: 22:05
Пример 4: Обработка некорректной даты
Если передать невалидную строку, функция вернет пустую строку, не вызывая ошибок.
$invalidDate = '32-13-2024'; $result = convertDate($invalidDate); var_dump($result); // Выведет: string(0) ""
Примечания
- Функция полностью зависит от поведения стандартной функции PHP
strtotime(). Любая строка, которуюstrtotime()может корректно обработать, будет принята. Подробнее о допустимых форматах можно прочитать в официальной документации PHP.
Функция hex2RGB
Конвертирует шестнадцатеричное значение цвета (HEX) в его RGB-эквивалент. Функция поддерживает 6-значный и 3-значный форматы, автоматически очищает входную строку от посторонних символов (например, #) и может возвращать результат как в виде ассоциативного массива, так и в виде строки с настраиваемым разделителем.
Сигнатура
function hex2RGB(string $hexStr, bool $returnAsString = false, string $separator = ','): array|string
Аргументы
- string
$hexStr - Строка с HEX-кодом цвета. Может быть в 3-значном (
f0c) или 6-значном (ff00cc) формате, с префиксом#или без него. - bool
$returnAsString(необязательный) - Определяет формат возвращаемого значения. Если
true, функция вернет строку. Еслиfalse(по умолчанию), вернется ассоциативный массив. - string
$separator(необязательный) - Символ или строка, которая будет использоваться в качестве разделителя для компонентов RGB, если
$returnAsStringустановлен вtrue. По умолчанию — запятая (,).
Результат
Возвращает значение в зависимости от параметра $returnAsString:
array(по умолчанию): Ассоциативный массив с ключами'red','green','blue'и их числовыми значениями (0-255).string: Строка, содержащая значения R, G, B, разделенные указанным сепаратором.
Если входная строка $hexStr не является валидным 3- или 6-значным HEX-кодом, функция вернет значения для белого цвета (255, 255, 255).
Примеры использования
Пример 1: Получение RGB в виде массива
$hexColor = '#343a40';
$rgbArray = hex2RGB($hexColor);
// Выведет:
// array(3) {
// ["red"]=> int(52)
// ["green"]=> int(58)
// ["blue"]=> int(64)
// }
print_r($rgbArray);
Пример 2: Работа с 3-значным форматом
// 'f8d' эквивалентно '#ff88dd' $shortHex = 'f8d'; $rgbArray = hex2RGB($shortHex); // Выведет: ['red' => 255, 'green' => 136, 'blue' => 221] print_r($rgbArray);
Пример 3: Получение RGB в виде строки для CSS
$hex = '#ffc107';
$rgbString = hex2RGB($hex, true);
echo 'color: rgb(' . $rgbString . ');';
// Выведет: color: rgb(255,193,7);
Пример 4: Использование пользовательского разделителя
$hex = '#17a2b8'; $rgbString = hex2RGB($hex, true, ' '); echo $rgbString; // Выведет: 23 162 184
Примечания
- Функция автоматически удаляет все символы, не являющиеся шестнадцатеричными (0-9, A-F), из входной строки, поэтому передача значений вроде
'#FF9900'является безопасной. - Источник и дополнительная информация: php.net
Функция humanFilesize
Преобразует числовое значение размера файла в байтах в более понятный для человека формат, добавляя суффиксы для байт (B), килобайт (K), мегабайт (M), гигабайт (G) и так далее. Функция использует степени 1024 для вычислений.
Сигнатура
function humanFilesize(int|float $bytes, int $decimals = 2): string
Аргументы
- int|float
$bytes - Размер в байтах.
- int
$decimals(необязательный) - Количество знаков после запятой для форматирования результата. По умолчанию 2.
Результат
Возвращает отформатированную строку (string), представляющую размер файла в человекочитаемом формате (например, '4.88K', '1.18M').
Примеры использования
Пример 1: Базовое использование с разными размерами
echo humanFilesize(0); // Выведет: 0.00B echo humanFilesize(980); // Выведет: 980.00B echo humanFilesize(5000); // Выведет: 4.88K echo humanFilesize(1234567); // Выведет: 1.18M echo humanFilesize(9876543210); // Выведет: 9.20G
Пример 2: Изменение точности вывода
Можно управлять количеством знаков после запятой с помощью второго аргумента.
$fileSizeInBytes = 1572864; // Это 1.5 МБ echo humanFilesize($fileSizeInBytes, 0); // Выведет: 1M echo humanFilesize($fileSizeInBytes, 2); // Выведет: 1.50M echo humanFilesize($fileSizeInBytes, 4); // Выведет: 1.5000M
Пример 3: Практическое применение с функцией filesize
Чаще всего эта функция используется для отображения размера реального файла.
$filePath = 'path/to/your/large-file.zip';
if (file_exists($filePath)) {
$bytes = filesize($filePath);
echo 'Размер файла ' . basename($filePath) . ': ' . humanFilesize($bytes);
} else {
echo 'Файл не найден.';
}
Примечания
- Функция использует следующие суффиксы:
B(байты),K(килобайты),M(мегабайты),G(гигабайты),T(терабайты),P(петабайты). Обратите внимание, что используются однобуквенные обозначения (K, M), а не более привычные 'KB', 'MB'. - В основе расчетов лежат степени 1024 (двоичные префиксы), а не 1000.
- Источник и дополнительная информация: php.net
Функция implodeWrap
Функция implodeWrap позволяет обернуть каждый непустой элемент массива в заданные строки (префикс и суффикс), а затем объединить их в одну сплошную строку. Это удобный инструмент для форматирования списков, тегов и других наборов данных, особенно при генерации HTML.
Сигнатура
function implodeWrap(array $data, string $before = '', string $after = ''): string
Аргументы
- array
$data - Индексированный или ассоциативный массив, значения которого будут обработаны.
- string
$before(необязательный) - Строка, которая будет добавлена в начало каждого непустого элемента массива.
- string
$after(необязательный) - Строка, которая будет добавлена в конец каждого непустого элемента массива.
Результат
Возвращает одну строку (string), полученную путем конкатенации всех обработанных элементов массива. Если исходный массив пуст, возвращается пустая строка.
Примеры использования
Пример 1: Создание набора HTML-тегов
Преобразование простого массива тегов в HTML-разметку.
$tags = ['php', 'mysql', 'javascript']; $beforeTag = '<span class="tag-item">'; $afterTag = '</span>'; $htmlTags = implodeWrap($tags, $beforeTag, $afterTag); // $htmlTags будет содержать: // <span class="tag-item">php</span><span class="tag-item">mysql</span><span class="tag-item">javascript</span> echo $htmlTags;
Пример 2: Игнорирование пустых значений
Функция автоматически пропускает элементы, которые являются "пустыми" (null, false, 0, '').
$values = ['Первый', null, 'Третий', 0, '', 'Последний']; $result = implodeWrap($values, '[', ']'); // $result будет содержать: // [Первый][Третий][Последний] echo $result;
Пример 3: Обычное обрамление без HTML
Функцию можно использовать для любого форматирования, например, для добавления кавычек.
$words = ['цитата', 'ещё одна']; $quotedString = implodeWrap($words, '"', '" '); // Добавляем пробел в конце для разделения // $quotedString будет содержать: // "цитата" "ещё одна" echo $quotedString;
Примечания
- Пустые значения: Элементы массива, которые приводятся к
false(например,0,'',null,false), не будут обрамлены и фактически исчезнут из итоговой строки.
Функция isValidEmoji
Проверяет, является ли входная строка валидным "одиночным эмодзи" согласно определенным правилам. Функция предназначена для валидации полей, где пользователь должен выбрать один символ-статус, иконку настроения и т.п.
Валидным считается либо пустая строка, либо строка, содержащая ровно один разрешенный символ-эмодзи. Флаги и символы из внутреннего "черного списка" считаются невалидными.
Сигнатура
function isValidEmoji(string $input): bool
Аргументы
- string
$input - Строка для проверки.
Результат
Возвращает булево значение (bool):
true— если строка пустая или содержит один разрешенный эмодзи.false— если строка содержит обычный текст, цифры, несколько символов, флаг или запрещенный эмодзи.
Примеры использования
Пример 1: Базовая валидация
Демонстрация работы с различными входными данными.
// Позитивные тесты
$isValid1 = isValidEmoji('✅'); // true
$isValid2 = isValidEmoji(' '); // true (пробелы обрезаются, строка становится пустой)
// Негативные тесты
$isInvalid1 = isValidEmoji('❌'); // false (в черном списке)
$isInvalid2 = isValidEmoji('Hello'); // false (текст)
$isInvalid3 = isValidEmoji('😊😊'); // false (два символа)
$isInvalid4 = isValidEmoji('🇩🇪'); // false (флаг)
Пример 2: Валидация пользовательского ввода
Предположим, у вас есть форма, где пользователь может установить себе "статус" в виде одного эмодзи.
$userStatus = $_POST['status_emoji'] ?? ''; // Например, пользователь ввел '👍'
if (isValidEmoji($userStatus)) {
// Ввод корректен, можно сохранять в базу данных
saveUserStatus($userId, $userStatus);
echo "Статус успешно обновлен!";
} else {
// Ввод некорректен
echo "Ошибка: пожалуйста, выберите один разрешенный эмодзи в качестве статуса.";
}
Примечания
- Пустая строка: Функция целенаправленно считает пустую строку валидным значением. Это позволяет использовать её для опциональных полей.
- Зависимость: Функция пытается использовать расширение PHP
intl(функциюgrapheme_strlen) для более точного определения длины строки, состоящей из одного визуального символа (графема). Если расширение недоступно, используется регулярное выражение с флагом\X. - Флаги и черный список: Эмодзи-флаги (состоящие из двух региональных индикаторов) и символы из внутреннего массива
$blacklistвсегда считаются невалидными.
Функция isValidUrl
Функция предназначена для проверки корректности и безопасности URL-адресов. Она выполняет последовательную валидацию по набору правил, включая проверку схемы, хоста, порта, пути, query-строки и наличие потенциально опасных XSS-вставок.
Сигнатура
function isValidUrl(string $url): bool
Аргументы
- string
$url - Строка с URL-адресом, который требуется проверить.
Результат
bool — возвращает true, если URL корректен и безопасен, или false, если нарушает правила.
Примеры использования
// Валидный URL с кириллическим доменом
var_dump(isValidUrl('https://пример.ua/страница')); // true
// Валидный URL с поддоменом и query
var_dump(isValidUrl('https://sub.domain.com/path?x=1')); // true
// Невалидный URL с javascript-схемой
var_dump(isValidUrl('javascript://alert(1)')); // false
// Невалидный URL с двойным слэшем в пути
var_dump(isValidUrl('http://example.com//resource')); // false
// Невалидный URL с XSS-подобной вставкой
var_dump(isValidUrl('http://test.com/%3Cscript%3Ealert(1)%3C/script%3E')); // false
Примечания
Функция не использует преобразование IDN-доменов в Punycode, поэтому допускает Unicode-домены напрямую. Это упрощает работу с кириллическими и другими национальными доменными зонами.
Функция mb_ucfirst
Преобразует первый символ многобайтовой строки в верхний регистр. Эта функция является полифилом (polyfill) — реализацией функциональности, которая недоступна в версии PHP < 8.4. Она служит безопасной заменой для стандартной функции ucfirst() при работе с многобайтовыми кодировками, такими как UTF-8.
Сигнатура
function mb_ucfirst(string $string, string $encoding = 'UTF-8'): string
Аргументы
- string
$string - Входная строка, первый символ которой нужно преобразовать.
- string
$encoding(необязательный) - Имя кодировки символов. По умолчанию используется
'UTF-8'.
Результат
Возвращает строку (string), в которой первый символ преобразован в верхний регистр.
Примеры использования
Пример 1: Работа с кириллицей
Стандартная функция ucfirst() некорректно работает с кириллическими символами, в то время как mb_ucfirst() справляется с этой задачей.
$text = 'привет'; echo ucfirst($text); // Выведет 'привет' (не сработает) echo mb_ucfirst($text); // Выведет 'Привет' (сработает корректно)
Пример 2: Обработка строки, уже начинающейся с заглавной буквы
Если строка уже начинается с заглавной буквы, она останется без изменений.
$text = 'Уже с заглавной'; echo mb_ucfirst($text); // Выведет 'Уже с заглавной'
Пример 3: Работа с пустой строкой
Передача пустой строки не вызовет ошибок и вернет пустую строку.
$emptyString = ''; echo mb_ucfirst($emptyString); // Выведет '' (пустую строку)
Примечания
- Полифил: Код функции обернут в условие
if (!function_exists('mb_ucfirst')). Это означает, что функция будет определена только в том случае, если она еще не существует в ядре PHP, что обеспечивает совместимость с будущими версиями. - Зависимости: Для работы функции требуется наличие расширения PHP
mbstring. - Источник: Комментарии в официальной документации PHP
Функция plur
Выполняет склонение существительных в зависимости от переданного числа (плюрализация). Функция принимает число и три формы слова, а затем возвращает наиболее подходящую из них. Особенностью функции является то, что выбранная форма слова автоматически передается в функцию перевода lang(), что позволяет использовать её в многоязычных проектах.
Сигнатура
function plur(int|string $number, string $f1, string $f2, string $f5): string
Аргументы
- int|string
$number - Число, на основе которого производится склонение. Может быть передано как целое число, так и в виде строки.
- string
$f1 - Форма для единственного числа (когда число заканчивается на 1, кроме 11). Например,
'файл'(«один файл»). - string
$f2 - Форма для малого количества (когда число заканчивается на 2, 3, 4, кроме 12, 13, 14). Например,
'файла'(«два файла»). - string
$f5 - Форма для множественного числа (когда число заканчивается на 0, 5-9 или является исключением 11-19). Например,
'файлов'(«пять файлов»).
Результат
Возвращает строку (string) с подходящей формой слова, которая была дополнительно обработана функцией перевода lang().
Примеры использования
Пример вывода количества найденных элементов
$count1 = 1; echo 'Найден ' . $count1 . ' ' . plur($count1, 'результат', 'результата', 'результатов'); // Выведет: Найден 1 результат $count2 = 4; echo 'Найдено ' . $count2 . ' ' . plur($count2, 'результат', 'результата', 'результатов'); // Выведет: Найдено 4 результата $count3 = 25; echo 'Найдено ' . $count3 . ' ' . plur($count3, 'результат', 'результата', 'результатов'); // Выведет: Найдено 25 результатов $count4 = 11; echo 'Найдено ' . $count4 . ' ' . plur($count4, 'результат', 'результата', 'результатов'); // Выведет: Найдено 11 результатов
Функция strCropWord
Обрезает строку до заданного количества "значимых" слов. В отличие от простой обрезки, эта функция позволяет игнорировать короткие слова (например, предлоги, союзы, артикли), что делает результат более осмысленным. Также функция умеет удалять HTML-теги перед обработкой.
Сигнатура
function strCropWord(string $text, int $countWords = 15, string $atEnd = ' ...', int $minChars = 2, bool $stripTags = true): string
Аргументы
- string
$text - Входная строка для обработки.
- int
$countWords(необязательный) - Целевое количество "значимых" слов, которые должны остаться в строке. По умолчанию 15.
- string
$atEnd(необязательный) - Строка, которая будет добавлена в конец, если текст был укорочен. По умолчанию ' ...'.
- int
$minChars(необязательный) - Минимальное количество символов, которое должно быть в слове, чтобы оно было засчитано в лимит
$countWords. По умолчанию 2. - bool
$stripTags(необязательный) - Если
true(по умолчанию), все HTML и PHP-теги будут удалены из входной строки перед обрезкой.
Результат
Возвращает обрезанную строку (string). Если исходная строка короче заданного лимита, она возвращается без изменений и без добавления конечной строки $atEnd.
Примеры использования
Пример 1: Базовая обрезка анонса
Создание короткого анонса для статьи блога.
$fullPost = 'Это первая статья в нашем новом блоге. Мы планируем регулярно публиковать здесь полезные материалы, советы и новости из мира веб-разработки. Оставайтесь с нами!'; $excerpt = strCropWord($fullPost, 10, ' »'); // $excerpt будет: 'Это первая статья в нашем новом блоге. Мы планируем регулярно »' echo $excerpt;
Пример 2: Игнорирование коротких слов
С помощью параметра $minChars можно получить более качественный результат, не учитывая короткие служебные слова.
$text = 'Раз, два, три, четыре, пять - я иду тебя искать. А кто не спрятался, я не виноват.'; // Обычная обрезка до 7 слов $result1 = strCropWord($text, 7); // 'Раз, два, три, четыре, пять - ...' // Обрезка до 7 слов, но считаем только те, в которых 3+ символа $result2 = strCropWord($text, 7, '...', 3); // 'Раз, два, три, четыре, пять - иду тебя искать. спрятался, виноват. ...' echo "Обычная обрезка: " . $result1 . "\n"; echo "Умная обрезка: " . $result2 . "\n";
Пример 3: Работа с HTML-содержимым
Функция может очистить текст от HTML-разметки перед обрезкой.
$html = '<h2>Заголовок</h2><p>Это <b>очень</b> важный текст, который нужно <i>красиво</i> обрезать.</p>'; // С удалением тегов $resultWithStrip = strCropWord($html, 5); // 'Заголовок Это очень важный текст, ...' // Без удаления тегов (не рекомендуется, может сломать разметку) $resultWithoutStrip = strCropWord($html, 5, '...', 2, false); // '<h2>Заголовок</h2><p>Это <b>очень</b> важный ...' echo "С очисткой: " . $resultWithStrip . "\n"; echo "Без очистки: " . htmlspecialchars($resultWithoutStrip) . "\n";
Примечания
- Зависимости: Функция использует расширение
mbstring(дляmb_strlen) для корректной работы с многобайтовыми кодировками, такими как UTF-8. - Разделитель: Функция использует пробел в качестве разделителя слов. Она может некорректно работать с текстами, где слова разделены несколькими пробелами или другими символами.
Функция strExplode
Функция strExplode — это мощный инструмент для преобразования строки, разделенной запятыми, в массив. Она предоставляет расширенные возможности по очистке, фильтрации и трансформации данных, что делает её гораздо более гибкой, чем стандартная функция explode.
Сигнатура
function strExplode(string $s = '', bool $unique = true, bool $int = false, bool $rangeDot = false): array
Аргументы
- string
$s(обязательный) - Входная строка для разбора. Элементы должны быть разделены запятыми.
- bool
$unique(необязательный) - Если
true(по умолчанию), все дублирующиеся значения в итоговом массиве будут удалены. - bool
$int(необязательный) - Если
true, функция отфильтрует массив, оставив только те элементы, которые являются положительными целыми числами (больше нуля). По умолчаниюfalse. - bool
$rangeDot(необязательный) - Если
true, функция попытается распознать строку как числовой диапазон, заданный через две точки (например,'1..10'), и преобразует её в массив чисел этого диапазона. По умолчаниюfalse.
Результат
Возвращает массив строк (array). Даже при использовании опции $int, элементы массива остаются строками. Если после всех обработок массив пуст, возвращается пустой массив.
Примеры использования
Пример 1: Обработка списка тегов
Стандартный случай: получение уникальных тегов из строки.
$tagString = ' php, javascript, css, php, , html '; $tags = strExplode($tagString); // $tags будет: ['php', 'javascript', 'css', 'html'] print_r($tags);
Пример 2: Получение списка числовых ID
Фильтрация строки для получения только валидных положительных идентификаторов.
$idString = '101, 54, 0, -20, abc, 101'; $ids = strExplode($idString, true, true); // $ids будет: ['101', '54'] print_r($ids);
Пример 3: Создание числового диапазона
Удобно для задания диапазонов в конфигурационных файлах.
$rangeString = '1..7'; $numbers = strExplode($rangeString, false, false, true); // $numbers будет: ['1', '2', '3', '4', '5', '6', '7'] print_r($numbers);
Примечания
- Функция автоматически удаляет пустые элементы, которые могут появиться из-за двойных или висячих запятых (например,
'a,,b,'). - При использовании опции
$int = true, в итоговый массив попадают строковые представления чисел, а не сами числа типаinteger. - Опция
$rangeDot = trueлучше всего работает, когда входная строка содержит только диапазон и ничего больше. Поведение при смешивании диапазона с другими значениями (например,'1, 2, 5..10') не определено и может привести к непредсказуемым результатам.
Функция strFirstDotClean
Функция strFirstDotClean предназначена для очистки строк, напоминающих пути к файлам или каталогам, от числовых префиксов (например, 01., 99.). Она автоматически определяет разделитель (/ или \), разбивает строку на сегменты и удаляет префикс из каждого сегмента.
Сигнатура
function strFirstDotClean(string $path): string
Аргументы
- string
$path - Входная строка для обработки. Может содержать разделители
/или\.
Результат
Возвращает обработанную строку (string), в которой из каждого сегмента удален префикс вида "число-точка". Если в строке не было разделителей, она обрабатывается как один сегмент.
Примеры использования
Пример 1: Очистка пути с разделителем \
Часто используется для путей в операционной системе Windows.
$windowsPath = 'C:\Users\Admin\Documents\01.Work\05.Reports\2024.report.docx'; $cleanedPath = strFirstDotClean($windowsPath); // $cleanedPath будет: 'C:\Users\Admin\Documents\Work\Reports\2024.report.docx' echo $cleanedPath;
Пример 2: Очистка пути с разделителем /
Стандартный случай для веб-путей или систем на базе Unix.
$urlPath = 'docs/01.getting-started/02.installation-guide'; $cleanedUrl = strFirstDotClean($urlPath); // $cleanedUrl будет: 'docs/getting-started/installation-guide' echo $cleanedUrl;
Пример 3: Обработка строки без разделителей
Если разделители отсутствуют, функция обрабатывает всю строку как единое целое.
$fileName = '03.final-chapter.md'; $cleanedFileName = strFirstDotClean($fileName); // $cleanedFileName будет: 'final-chapter.md' echo $cleanedFileName;
Пример 4: Частичное совпадение
Префиксы удаляются только там, где они есть. Остальные сегменты остаются без изменений.
$mixedPath = 'projects/01.alpha-project/src/main.js'; $cleanedMixedPath = strFirstDotClean($mixedPath); // $cleanedMixedPath будет: 'projects/alpha-project/src/main.js' echo $cleanedMixedPath;
Примечания
- Определение разделителя: Функция сначала ищет символ
/. Если он не найден, она ищет\. Используется первый найденный разделитель. - Формат префикса: Удаляются только префиксы, состоящие из одной или нескольких цифр, за которыми сразу следует точка (
.). Префиксы вроде'01-'или'A.'не будут удалены.
Функция strFormat
Функция strFormat представляет собой простой, но эффективный шаблонизатор. Она позволяет создавать сложные строки, подставляя данные из ассоциативного массива в предопределенный шаблон. Плейсхолдеры в шаблоне должны иметь формат %ключ%, где ключ соответствует ключу в массиве данных.
Сигнатура
function strFormat(string $format, array $array): string
Аргументы
- string
$format - Строка-шаблон, содержащая плейсхолдеры для замены. Например,
'Привет, %user%!'. - array
$array - Ассоциативный массив данных, где ключи — это имена плейсхолдеров (без символов
%), а значения — это данные для подстановки.
Результат
Возвращает новую строку (string), в которой все найденные плейсхолдеры заменены соответствующими значениями из массива.
Примеры использования
Пример 1: Создание HTML-ссылки
Это наиболее частый и полезный сценарий использования функции. Обратите внимание, что данные для HTML (имена, URL) должны быть подготовлены заранее для обеспечения безопасности.
$linkParams = [
'class' => 'user-link active',
'url' => '/users.php?id=' . urlencode('1&role=admin'), // urlencode для безопасности URL
'name' => htmlspecialchars('<Ivan Ivanov>'), // htmlspecialchars для безопасности HTML
'count' => 5,
];
$format = '<a class="%class%" href="%url%">%name% <sup>%count%</sup></a>';
$htmlLink = strFormat($format, $linkParams);
// $htmlLink будет содержать:
// <a class="user-link active" href="/users.php?id=1%26role%3Dadmin"><Ivan Ivanov> <sup>5</sup></a>
echo $htmlLink;
Пример 2: Формирование простого текстового отчета
Функцию можно использовать для создания любых текстовых сообщений по шаблону.
$reportData = [
'date' => date('d.m.Y'),
'user' => 'Администратор',
'status' => 'успешно',
'records' => 150,
];
$reportTemplate = 'Отчет за %date%. Пользователь: %user%. Операция завершена %status%. Обработано записей: %records%.';
$reportText = strFormat($reportTemplate, $reportData);
// Выведет что-то вроде:
// Отчет за 21.05.2024. Пользователь: Администратор. Операция завершена успешно. Обработано записей: 150.
echo $reportText;
Примечания
- Безопасность: Функция выполняет простую замену текста и не производит никакого экранирования. Всегда подготавливайте и экранируйте данные (например, с помощью
htmlspecialcharsдля HTML илиurlencodeдля URL) перед передачей их в функцию, чтобы избежать XSS и других уязвимостей. - Отсутствующие ключи: Если в массиве
$arrayотсутствует ключ, соответствующий плейсхолдеру в строке$format, то этот плейсхолдер останется в итоговой строке без изменений (например,%unmatched_key%).
Функция strRemoveLF
Функция strRemoveLF предназначена для базовой минимизации текстовых данных, таких как HTML, CSS или JavaScript. Она выполняет две основные операции: сначала удаляет все ведущие и замыкающие пробелы и символы табуляции с каждой строки текста, а затем убирает все переносы строк, превращая форматированный код в одну сплошную строку.
Сигнатура
function strRemoveLF(string $text): string
Аргументы
- string
$text - Входная строка для сжатия. Может содержать форматирование, такое как отступы и переносы строк.
Результат
Возвращает сжатую строку (string) без переносов и лишних пробелов по краям строк.
Примеры использования
Пример 1: Сжатие HTML-кода
Часто используется для удаления форматирования из HTML-шаблонов перед выводом, чтобы уменьшить размер ответа.
$htmlBlock = '
<div class="container">
<h1>Привет, мир!</h1>
</div>
';
$compressedHtml = strRemoveLF($htmlBlock);
// $compressedHtml будет:
// <div class="container"><h1>Привет, мир!</h1></div>
echo $compressedHtml;
Пример 2: Минимизация CSS
Аналогично можно сжимать стили.
$cssRules = '
.header {
background-color: #f0f0f0;
padding: 10px;
}
.footer {
font-size: 12px;
}
';
$minifiedCss = strRemoveLF($cssRules);
// $minifiedCss будет:
// .header {background-color: #f0f0f0;padding: 10px;}.footer {font-size: 12px;}
echo $minifiedCss;
Пример 3: Обработка простого текста
Функция также работает с обычным текстом, объединяя несколько строк в одну.
$multiLineText = "
Это первая строка.
А это вторая.
И третья с отступом.
";
$singleLine = strRemoveLF($multiLineText);
// $singleLine будет:
// Это первая строка.А это вторая.И третья с отступом.
echo $singleLine;
Пример 4: Использование Heredoc-синтаксиса
css.style[]: <?= strRemoveLF(<<<TXT
li {margin-bottom: 20px}
div.r {color: red}
TXT) ?>
Примечания
- Функция не является полноценным минификатором кода. Она не удаляет пробелы внутри строк (например, между селектором и скобкой в CSS) и не обрабатывает синтаксические конструкции, такие как строковые литералы в JavaScript. Её основная задача — убрать форматирование отступов и переносов.
Функция strToSlug
Преобразует строку в "слаг" (slug) — формат, подходящий для использования в URL-адресах. Функция выполняет транслитерацию символов (включая кириллицу для русского, украинского, белорусского и других языков), удаляет большинство знаков препинания и специальных символов, а также заменяет пробелы на дефисы.
Сигнатура
function strToSlug(string $slug, bool $deleteSlash = true, bool $deleteDot = false, string $nbsp = '-'): string
Аргументы
- string
$slug - Входная строка для преобразования.
- bool
$deleteSlash(необязательный) - Если
true(по умолчанию), удаляет все прямые (/) и обратные (\) слэши. Установите вfalse, чтобы сохранить структуру пути. - bool
$deleteDot(необязательный) - Если
true, удаляет все точки (.). По умолчаниюfalse, что позволяет сохранять расширения файлов. - string
$nbsp(необязательный) - Символ-заменитель для пробелов. По умолчанию используется дефис (
-).
Результат
Возвращает очищенную и транслитерированную строку (string) в нижнем регистре.
Примеры использования
Пример 1: Создание слага для заголовка статьи
Это основной сценарий использования для генерации URL-адресов страниц.
$articleTitle = 'Статья №1: «Лучшие практики» © 2024'; $urlSlug = strToSlug($articleTitle); // $urlSlug будет: 'statya-1-luchshie-praktiki-c-2024' echo $urlSlug;
Пример 2: Очистка имени файла с сохранением расширения
С помощью флагов можно аккуратно обработать имя файла, сохранив его расширение и структуру каталогов.
$filePath = 'Мои Документы/Отчёт (лето).docx'; // Сохраняем слэш и точку $cleanPath = strToSlug($filePath, false, false); // $cleanPath будет: 'moi-dokumenty/otchyot-leto.docx' echo $cleanPath; // Полная очистка для использования в качестве ID $cleanId = strToSlug($filePath, true, true); // $cleanId будет: 'moi-dokumentyotchyot-letodocx' echo $cleanId;
Пример 3: Использование другого разделителя
Можно заменить стандартный дефис на другой символ, например, на нижнее подчеркивание.
$text = 'Some variable name'; $variableName = strToSlug($text, true, true, '_'); // $variableName будет: 'some_variable_name' echo $variableName;
Примечания
- Источник: Функция основана на реализации, используемой в MaxSite CMS.
- Многоязычность: Таблица транслитерации включает символы для русского, украинского, белорусского, румынского и болгарского языков.
- Стандарт транслитерации: За основу взят стандарт ISO 9, но с некоторыми популярными отклонениями (например, 'ц' → 'cz', 'ч' → 'ch').
Функция strUcFirst
Функция strUcFirst преобразует строку, делая заглавной первую букву каждого слова или сегмента, разделенного одним из указанных символов-разделителей. Это полезно для форматирования идентификаторов, путей или заголовков в более читаемый вид (например, "kebab-case" в "Header-Case").
Перед преобразованием каждый сегмент приводится к нижнему регистру для обеспечения единообразного результата.
Сигнатура
function strUcFirst(string $string, array $delimiters = ['/', '|', '-', '_']): string
Аргументы
- string
$string - Исходная строка для обработки.
- array
$delimiters(необязательный) - Массив символов, которые будут использоваться в качестве разделителей. По умолчанию:
['/', '|', '-', '_'].
Результат
Возвращает новую строку (string), в которой первая буква каждого сегмента, отделенного разделителем, преобразована в верхний регистр.
Примеры использования
Пример 1: Форматирование "kebab-case" строки
Преобразование строки, используемой в URL, в читаемый заголовок.
$slug = 'my-first-post-about-php'; $title = strUcFirst($slug, ['-']); // $title будет 'My-First-Post-About-Php' echo $title;
Пример 2: Работа с путями и смешанными разделителями
Функция использует все разделители из массива по умолчанию для обработки сложной строки.
$complexPath = 'modules/user_profile|show-action'; $formattedPath = strUcFirst($complexPath); // $formattedPath будет 'Modules/User_Profile|Show-Action' echo $formattedPath;
Пример 3: Обработка строки в верхнем регистре
Благодаря предварительному приведению к нижнему регистру, функция корректно форматирует строки, изначально написанные в верхнем регистре.
$constantName = 'MY_CONSTANT_VALUE'; $formattedName = strUcFirst($constantName, ['_']); // $formattedName будет 'My_Constant_Value' echo $formattedName;
Примечания
- Разделители: Сами символы-разделители остаются в строке без изменений.