0

我正在使用以下代码:

PHP:

// Generate Guid 
function NewGuid() { 
    $s = strtoupper(uniqid(rand(),true)); 
    $guidText = 
        substr($s,0,8) . '-' . 
        substr($s,8,4) . '-' . 
        substr($s,12,4). '-' . 
        substr($s,16,4). '-' . 
        substr($s,20); 
    return $guidText;
}
// End Generate Guid 

$Guid = NewGuid();

$alphabet = '123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ';    

function base_encode($num, $alphabet) {
    $base_count = strlen($alphabet);
    $encoded = '';

    while ($num >= $base_count) {

        $div = $num/$base_count;
        $mod = ($num-($base_count*intval($div)));
        $encoded = $alphabet[$mod] . $encoded;
        $num = intval($div);
    }

    if ($num) $encoded = $alphabet[$num] . $encoded;
        return $encoded;
}


function base_decode($num, $alphabet) {
    $decoded = 0;
    $multi = 1;

    while (strlen($num) > 0) {
        $digit = $num[strlen($num)-1];
        $decoded += $multi * strpos($alphabet, $digit);
        $multi = $multi * strlen($alphabet);
        $num = substr($num, 0, -1);
    }

    return $decoded;
}

// Ob start 
 ob_start();
 echo base_encode($Guid, $alphabet); //should output: bUKpk
 $theid = ob_get_contents();
 ob_get_clean();

问题:

当 I 时echo $theid,它显示完整的条目,但是当它被插入数据库时​​,只插入序列中的第一个条目,例如对于条目buKPK,只插入 'b' 而不是其余的。

4

2 回答 2

4

检查数据库中的字符长度(即,如果它是 varchar(10),请确保您在该字段中存储的字符不超过 10 个)

于 2010-12-28T17:58:08.310 回答
2

尝试使用ob_end_clean()而不是ob_get_clean(). 对 ob_start() 的连续调用创建“嵌套”缓冲上下文;ob_get_clean()获取并清除当前上下文,但不会终止它,因此第二次调用ob_start()创建第二个嵌套缓冲上下文。在这种情况下,您只想捕获输出缓冲区,然后终止捕获上下文。

于 2010-12-28T17:58:20.810 回答