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

Каков алгоритм и принцип работы данной функции на PHP?

Есть функция на php выдернутая из CMS. Функция обрезает строку до нужного количества символов. Но не могу разобрать несколько нюансов:
1) зачем вообще нужна соль
2) что означает регулярное выражение во втором реплэйсе
3) почему по умолчанию сразу стоит $size=false (есть предположение, что если указать функцию лишь с переменной $string в коде, то полетят ерроры о неизвестной переменной)

Вот сама функция:
# Обрезка строки до нужной длины
function engine_string_trim($string,$size=false,$salt='...') {
	$string=preg_replace('/ {2,}/',' ',preg_replace('/[\x09\x0A\x0B\x0D]/',' ',trim(strval($string))));
	if(!$size or mb_strlen($string)<=$size) return $string;
	else return mb_substr($string,0,$size-mb_strlen($salt)).$salt;
}
  • Вопрос задан
  • 2567 просмотров
Подписаться 2 Оценить Комментировать
Решения вопроса 1
Fesor
@Fesor
Full-stack developer (Symfony, Angular)
1) соль - это то что долепить к строке если мы ее обрезали.
2) вообще вся эта строка нужна что бы убрать двойные пробелы, табуляции и прочие штуки на пробелы заменить. Что бы правильно можно было посчитать длину строки.
3) нет, если вы внимательно посмотрите, в начале есть условие:
// если $size равно нулю или false, или длина строки меньше данной нам для обрезания
if (!$size || mb_strlen($string) <= $size) {
    // ничего не обрезаем и не лепим к строке соль
    return $string;
}
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@maxyc_webber
Web-программист
я думаю в данном случае соль добавлена в $string и поэтому при выводе обрезается оная с конца
Ответ написан
Комментировать
HangGlider
@HangGlider
1. strval преобразует переменную $string к строковому типу
2. trim - т.к. второй параметр не задан, удаляет...
" " (ASCII 32 (0x20)), обычный пробел.
"\t" (ASCII 9 (0x09)), символ табуляции.
"\n" (ASCII 10 (0x0A)), символ перевода строки.
"\r" (ASCII 13 (0x0D)), символ возврата каретки.
"\0" (ASCII 0 (0x00)), NUL-байт.
"\x0B" (ASCII 11 (0x0B)), вертикальная табуляция.

из начала и конца строки
3. preg_replace ищет в оставшейся строке символы
\x09 - табуляция
\x0A - перевод строки
\x0B - вертикальный таб
\x0D - возврат каретки

и заменяет их на пробелы.
4. внешний preg_replace - ищет два и более пробелов подряд и заменяет их на одиночный пробел.

Назначение соли и параметра $size надо искать не в реализации функции, а в контексте её применения по коду.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы