applechief
applechief

Reputation: 6915

PHP weird result converting string to int

I am scrapping data out of a file, from that data i'm getting the year out. When i try to convert that year (2011) to an int, i get a weird result (2). Here's what my code looks like. $year is the value i am getting from the file.

$year_int = (int) $year;

var_dump($year); //Return string(8) "2011"
var_dump($year_int); //Return int(2)

I expect $year_int to be an int(2011). And why is $year a string(8) shouldn't it be a string(4)?

Upvotes: 1

Views: 259

Answers (2)

Leonid Shevtsov
Leonid Shevtsov

Reputation: 14189

I reckon your string is UTF16-encoded, so each char is encoded with 16 bits, or 2 bytes. PHP still considers it a ASCII string, reads the 1st byte (2), then the 2nd byte (zero char), and stops there.

iconv('UTF-16', 'ASCII', $year) should help

EDIT I guessed that the string is in UTF16, because its characters, while being ASCII, took up 2 bytes each. Your string could be in one of the Asian two-byte encodings, but still most likely it's Unicode, and you're likely on Windows, because UTF16 is Windows' internal encoding.

Here's a good starter article on Unicode: http://www.joelonsoftware.com/articles/Unicode.html

Upvotes: 3

Niet the Dark Absol
Niet the Dark Absol

Reputation: 324840

string(8) "2011" - does nothing seem odd to you about that? Maybe the fact that there are only four characters visible?

Try this:

for( $i=0; $i<strlen($year); $i++) echo ord($year[$i])." ";

See what that gives you. If it were correct, it should print "50 48 49 49".

Chris edit: Thought I'd expand on this answer. Please see the example here on what Kolink meant by "invisible" characters.

Upvotes: 1

Related Questions