print_r(strlen(trim(' ')));
результат – 9
Я также пробовал
preg_replace('/[\n\r\t\s]/', '', ' ')
но результат не равен нулю.
Загрузите мой код, и вы получите результат
http://blog.eood.cn/attachment.php?id=70
mb_language('uni'); mb_internal_encoding('UTF-8'); $s = ' '; if (strlen(preg_replace('/\s+/u','',$s)) == 0) { echo "String is empty.\n"; }
Если это не работает, я предлагаю сделать это
$s = ' '; if (strlen(trim(preg_replace('/\xc2\xa0/',' ',$s))) == 0) { echo "String is empty.\n"; }
Эти решения были протестированы на разных платформах.
Флаг u указывает preg_replace () обрабатывать строку как многобайтную строку, а именно utf-8
Характер – это неразрывное пространство C2A0 и может быть сгенерировано с помощью alt + 0160.
Может быть, вы делаете что-то еще, что испортило результаты? Ваш тест возвращает 0
print_r(strlen(trim(' ')));
И это ожидаемое поведение обрезки .
Эта функция возвращает строку с пробелом, разделенным с начала и конца строки. Без второго параметра 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)), вертикальная вкладка.
ОБНОВИТЬ:
Глядя на ваш прилагаемый код, я заметил, что у вас есть дополнительный символ между двумя пробелами.
Это вывод hexdump -C
$ hexdump -C space.php 00000000 3c 3f 0d 0a 70 72 69 6e 74 5f 72 28 73 74 72 6c |<?..print_r(strl| 00000010 65 6e 28 74 72 69 6d 28 27 20 c2 a0 20 27 29 29 |en(trim(' .. '))| 00000020 29 3b 0d 0a 3f 3e |);..?>| 00000026
И это вывод od , только с этим символом в файле.
$ od space.php 0000000 120302 0000002
trim не удалит это пространство, потому что .. ну, это не пробел. Это хорошая рекомендация о том, как обнаружить необычные персонажи.
О, и чтобы ответить на ваш обновленный вопрос, просто используйте пустой, как сказал Питер.
Я думаю, что самый быстрый способ состоит в том, чтобы обрезать ведущие пробелы ( ltrim
будет неудачно быстро, если есть другие символы) и сравнить результат с пустой строкой:
# Check if string consists of only spaces if (ltrim($string, ' ') === '') {
Достаточно простого preg_match ():
if(preg_match('/^\s+$/', $str)) == 1){ die('there are only spaces!'); }
Вы можете использовать функцию count_chars
или функцию substr_count
.
Вы хотите знать, содержит ли строка пробел?
if(strpos($string, ' ') !== false) echo $string.' contains a space';
Как насчет этого …
$str = preg_replace('/\s\s+/', '', $str);
Или это…
$str = str_replace(array("\n", "\r", "\t", " ", "\o", "\xOB"), '', $str);
if(strlen(trim($_POST['foobar'])) == 0){ die('the user didn\'t input anything!'); }
empty
тоже
как
$bar = trim($_POST['foobar']); if(empty($bar)){ die('the user didn\'t input anything!'); }
если trim ($ var) не работает, то $ var может не быть строкой. поэтому сначала бросать в строку
$ var1 = string ($ var), а затем trim ($ var1) .