PHP странный результат преобразования строки в int - PullRequest
1 голос
/ 29 октября 2011

Я удаляю данные из файла, из этих данных я получаю год. Когда я пытаюсь преобразовать этот год (2011) в int, я получаю странный результат (2). Вот как выглядит мой код. $ year - это значение, которое я получаю из файла.

$year_int = (int) $year;

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

Я ожидаю, что $ year_int будет int (2011). И почему $ year - это строка (8), если она не является строкой (4)?

Ответы [ 2 ]

3 голосов
/ 29 октября 2011

Я считаю, что ваша строка в кодировке UTF16 , поэтому каждый символ кодируется 16 битами или 2 байтами. PHP по-прежнему считает ее строкой ASCII, читает 1-й байт (2), затем 2-й байт (нулевой символ) и останавливается на этом.

iconv('UTF-16', 'ASCII', $year) должно помочь

EDIT Я догадался, что строка в UTF16, потому что ее символы, будучи ASCII, занимают 2 байта каждый. Ваша строка может быть в одной из азиатских двухбайтовых кодировок, но, скорее всего, это Unicode, и вы, скорее всего, в Windows, потому что UTF16 - внутренняя кодировка Windows.

Вот хорошая статья для начинающих по Unicode: http://www.joelonsoftware.com/articles/Unicode.html

1 голос
/ 29 октября 2011

string(8) "2011" - тебе ничего не кажется странным? Может быть, тот факт, что видны только четыре символа?

Попробуйте это:

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

Посмотри, что это тебе даст. Если это правильно, выведите «50 48 49 49».

Крис редактировать: Думаю, я бы расширил этот ответ. Пожалуйста, посмотрите пример здесь о том, что Колинк имел в виду под «невидимыми» символами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...