В моем приложении laravel я пытаюсь урезать результат, который я получаю из базы данных. Функция trim () не удаляет последнее пространство в строке.
Код – это
$institutes = Institute::all(); foreach ($institutes as $institute) { $str = $institute->name; $str = trim($str); //doesn't remove the trailing space $len = strlen($str); }
Теперь, прежде всего, длина $str
равна 1 больше, чем она должна быть. Это должно быть 20
но это как-то показывает 21
. Другое дело, последний символ – это space
по моему входу.
Когда я пытаюсь напечатать последние (21-й) и второй (20-й) символы – последний символ (который даже не должен быть там), а второй последний символ, который должен быть space
, окажется чем-то вроде этого .
dot
в браузере (как второй последний символ) появляется в течение почти секунды, а затем исчезает. Теперь, что происходит? Почему это происходит?
Пожалуйста, дайте мне указания, иначе я сойду с ума!
Обновить:
Это дамп переменной $str
–
string(21) "Vidyalankar Classes "
Я чувствую, что конечное пространство, на которое вы ссылаетесь, является символом не-utf8.
Вместо этого попробуйте удалить все недопустимые символы, а не обрезать.
foreach ($institutes as $institute) { $str = $institute->name; // be careful, try to double check, might also remove valid utf 8 characters like Chinese characters. $str = preg_replace('/[^(\x20-\x7F)]*/','', $str); $len = strlen($str); }
обратитесь к документации по обрезке .
Эта функция возвращает строку с пробелом, разделенным с начала и конца строки. Без второго параметра trim () разделит эти символы:
" " (ASCII 32 (0x20)), an ordinary space. "\t" (ASCII 9 (0x09)), a tab. "\n" (ASCII 10 (0x0A)), a new line (line feed). "\r" (ASCII 13 (0x0D)), a carriage return. "\0" (ASCII 0 (0x00)), the NUL-byte. "\x0B" (ASCII 11 (0x0B)), a vertical tab.
Вы также можете попробовать другой подход, например
$str = preg_replace('/[^A-Za-z0-9\. -]/','', $str); // using trim, trims off invalid characters $str = trim($str, "\x20..\x7F");