PHP奇怪的结果将字符串转换为int

时间:2011-10-29 19:02:18

标签: php casting

我正在从一个文件中删除数据,从那些数据我即将结束。当我尝试将那一年(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 个答案:

答案 0 :(得分:3)

我认为你的字符串是UTF16-encoded,所以每个字符都用16位或2字节编码。 PHP仍将其视为ASCII字符串,读取第一个字节(2),然后读取第二个字节(零个字符),然后停在那里。

iconv('UTF-16', 'ASCII', $year)应该提供帮助

编辑我猜测字符串是UTF16,因为它的字符虽然是ASCII,但每个字符占用2个字节。你的字符串可能是亚洲双字节编码之一,但很可能是Unicode,你可能在Windows上,因为UTF16是Windows的内部编码。

这是一篇关于Unicode的好文章:http://www.joelonsoftware.com/articles/Unicode.html

答案 1 :(得分:1)

string(8) "2011" - 对你来说没什么好看的吗?也许事实上只有四个字符可见?

试试这个:

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

看看它给你带来了什么。如果是正确的,应打印“50 48 49 49”。

Chris编辑:我想我会扩展这个答案。请参阅example here关于Kolink在“隐形”字符中的含义。

相关问题