views:

656

answers:

9
print_r(strlen(trim('     ')));

the result is 9

I also tried

preg_replace('/[\n\r\t\s]/', '', '   ')

but the result is not zero.

Please download my code and you will get the result

http://blog.eood.cn/attachment.php?id=70

A: 

You could use the count_chars function or the substr_count function.

Konamiman
A: 

You want to know if a string contains a space?

if(strpos($string, ' ') !== false) echo $string.' contains a space';
Mark
A: 

How about this...

$str = preg_replace('/\s\s+/', '', $str);

Or this...

$str = str_replace(array("\n", "\r", "\t", " ", "\o", "\xOB"), '', $str);
Ei Maung
the result is 2, not zero
bruce dou
+4  A: 
mb_language('uni');
mb_internal_encoding('UTF-8');

$s = '     ';
if (strlen(preg_replace('/\s+/u','',$s)) == 0) {
    echo "String is empty.\n";
}

If that doesn't work i suggest doing this

$s = '     ';
if (strlen(trim(preg_replace('/\xc2\xa0/',' ',$s))) == 0) {
    echo "String is empty.\n";
}

These solutions have been tested on different platforms.

The u flag tells preg_replace() to treat the string as a multibyte string, namely utf-8

The character is a nonbreaking space C2A0 and can be generated with alt+0160.

Peter Lindqvist
Can you download my code and check the *space*, i think it is not normal space.
bruce dou
Note that `empty` also returns *true* for `"0"`.
Gumbo
Please download my code
bruce dou
have downloaded, and updated response
Peter Lindqvist
i used your code, but also got 2.
bruce dou
You may need to specify the internal encoding.
Peter Lindqvist
unfortunately it also doesn't work
bruce dou
it worked, but how many space like \xc2\xa0 ?
bruce dou
And thanks for your answer.
bruce dou
there was one non breaking space in your code, but the preg_replace would convert them all to regular space and then trim can take care of it.
Peter Lindqvist
+1  A: 

I think the fastest way is to trim leading spaces (ltrim will fail fast if there are other characters) and compare the result to the empty string:

# Check if string consists of only spaces
if (ltrim($string, ' ') === '') {
soulmerge
A: 
if(strlen(trim($_POST['foobar'])) == 0){
 die('the user didn\'t input anything!');
}

empty would also make it

like

$bar = trim($_POST['foobar']);
if(empty($bar)){
 die('the user didn\'t input anything!');
}
RageZ
I cannot get the empty statement to run, what's the deal with that?
Peter Lindqvist
Ah, you have to assign the trimmed string to a variable before using empty.
Peter Lindqvist
@Peter: good point!
RageZ
Beware to empty(): empty('0') returns True as well!
Erlock
+2  A: 

Maybe you are doing something else that is messing up the results? Your test do returns 0

print_r(strlen(trim('     ')));

And that's the expected behavior of trim.

This function returns a string with whitespace stripped from the beginning and end of str . Without the second parameter, trim() will strip these characters:

  • " " (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.

UPDATE:

Looking at your attached code i noticed you have an extra character between 2 spaces.

This is the output of 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

And this is the output of od, with just that character in the file.

$ od space.php 
0000000    120302                                                        
0000002

trim won't delete that space, because.. well, it's not a space. This is a good reference on how to spot unusual characters.

Oh, and to answer your updated question, just use empty as Peter said.

pablasso
+1  A: 

A simple preg_match() would suffice:

if(preg_match('/^\s+$/', $str)) == 1){
 die('there are only spaces!');
}
Erlock
A: 

if trim($var) is not working then $var may be not a string. so first cast into string

$var1 = string($var) and then trim($var1).

uwillneverknow