更正:
$a = unserialize('O:8:"osiClass":2:{s:1:"a";s:5:"Hello";s:1:"b";s:4:"good";;}');原处多了个; 

解决方案 »

  1.   

    PHP_FUNCTION(unserialize)
    {
        char *buf;
        int buf_len;
        const unsigned char *p;
        php_unserialize_data_t var_hash;    if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &buf, &buf_len) == FAILURE) {
            RETURN_FALSE;
        }    if (buf_len == 0) {
            RETURN_FALSE;
        }    p = (const unsigned char*)buf;
        PHP_VAR_UNSERIALIZE_INIT(var_hash);
        if (!php_var_unserialize(&return_value, &p, p + buf_len,  &var_hash TSRMLS_CC)) {
            PHP_VAR_UNSERIALIZE_DESTROY(var_hash);
            zval_dtor(return_value);
            php_error_docref(NULL TSRMLS_CC, E_NOTICE, "Error at offset %ld of %d bytes", (long)((char*)
    p - buf), buf_len);
            RETURN_FALSE;
        }
        PHP_VAR_UNSERIALIZE_DESTROY(var_hash);
    }
      

  2.   

    恩,上面是摘自PHP源码
    /ext/standard/var.c具体你可以自己查看应该来说,直接构造会快一些
      

  3.   

    谢谢楼上laruence(雪侯鸟)c语言不怎么好大概解释下原理好吗?谢谢