Обрезать пробелы в строке

PHP: я хочу trim() удалить пробелы в начале строки с помощью php, но настройки по умолчанию в trim() не обрабатывают символы пробелов. Белое пространство имеет длину 7 пробелов. Есть ли способ удалить 7 пробелов с помощью trim() или другой функции?

Будет работать функция, которая обрезает все до тех пор, пока не встретится «нормальный» символ (кавычки, например, я не знаю, как назвать нормальный символ).


person JMC    schedule 25.08.2011    source источник
comment
Я бы разместил пробел здесь, но я действительно не знаю, как его показать.   -  person JMC    schedule 25.08.2011
comment
Что-то вроде for ($i = 0; $i < strlen($str); $i++) { print_r(ord($str[$i]));} должно, по крайней мере, определять, что на самом деле представляют собой символы.   -  person lonesomeday    schedule 25.08.2011
comment
ну, для начала вы можете преобразовать строку в массив байтов и опубликовать здесь значения ascii байтов. Но в качестве альтернативы, если вам не удалось волшебным образом найти новый пробельный символ, было бы полезнее опубликовать свой код здесь.   -  person Andreas Grapentin    schedule 25.08.2011
comment
@lonesomeday - 160 - это значение пробела в вашей функции.   -  person JMC    schedule 25.08.2011
comment
ну, это странно. но это не пробел. :)   -  person Andreas Grapentin    schedule 25.08.2011
comment
О, это ascii так это... Должен был знать.   -  person JMC    schedule 25.08.2011


Ответы (5)


Используйте метод ltrim().

http://www.php.net/manual/en/function.ltrim.php

person Joel Etherton    schedule 25.08.2011
comment
Что касается проблемы, которую он заявил, я сомневаюсь, что это решит его проблемы. - person Andreas Grapentin; 25.08.2011

функция php trim(), следуя своей спецификации, удаляет все символы пробела в начале и в конце строки, где пробел включает пробел, табуляцию, новую строку и нулевой байт. Я предполагаю, что вы должны использовать его неправильно тогда? Некоторый код определенно поможет решить вашу проблему.

person Andreas Grapentin    schedule 25.08.2011

Чтобы избавиться от всех видов злых пробелов (есть больше, чем просто варианты ASCII), вы можете использовать preg_replace:

$str = preg_replace('/^\pZ+/u', '', $str);

Если это не сработает, вам придется сначала изучить реальных персонажей. Используйте bin2hex() или шестнадцатеричный редактор по вашему выбору, чтобы проверить, что у вас на самом деле есть в вашей строке.

person mario    schedule 25.08.2011

trim() по умолчанию обрабатывает следующие пробельные символы:

  • " " (ASCII 32 (0x20)), обычный пробел.
  • "\t" (ASCII 9 (0x09)), таб.
  • "\n" (ASCII 10 (0x0A)), новая строка (перевод строки).
  • "\r" (ASCII 13 (0x0D)), возврат каретки.
  • "\0" (ASCII 0 (0x00)), нулевой байт.
  • «\x0B» (ASCII 11 (0x0B)), вертикальная вкладка.

это будет означать, что ваш пробел не является одним из них. Если вы можете выяснить, что это за пробел, вы можете передать его в качестве аргумента функции trim().

person cdnza    schedule 25.08.2011
comment
Согласен, есть идеи, как его идентифицировать? - person JMC; 25.08.2011

Это должно быть все, что вам нужно:

function remWhite($str) {
    $value = preg_replace('/\s+/', '',$str);
    return $value;
}
person nbelmont    schedule 25.08.2011
comment
регулярное выражение для обрезки? ты серьезно? O_o Это 1.) совершенно неэффективно и 2.) показывает другое поведение, если входная строка не начинается с пробела, но содержит его. - person Andreas Grapentin; 25.08.2011