我正在从一个文件中删除数据,从那些数据我即将结束。当我尝试将那一年(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)?
答案 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在“隐形”字符中的含义。