Reputation: 6915
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
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
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