【问题标题】:ob_start() is partially capturing dataob_start() 正在部分捕获数据
【发布时间】:2010-12-28 17:52:20
【问题描述】:

我正在使用以下代码:

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();

问题:

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

【问题讨论】:

  • 当我运行这个时,我得到了预期的结果。
  • 我对该特定代码中 ob_start 解决方法的目的感到困惑。为什么你echo结果而不是直接赋值呢?
  • 我只是假设他正在简化代码以隔离问题。
  • @mario,因为正在回显的内容被保存为数据库中的条目。有更好的主意吗?我是 programmign 的新手,所以使用我从傻瓜书中学到的东西。
  • 仅将 ob_start 部分替换为 $theid = base_encode($Guid, $alphabet);,如果需要为数据库打印出来 (???),您可以稍后回显该变量。

标签: php mysql database ob-start


【解决方案1】:

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

【讨论】:

  • 好吧,成功了,我使用的是 int() 而不是 varchar...谢谢 shankhan。
【解决方案2】:

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

【讨论】:

  • 谢谢克里斯。使用它实际上让我得到了第二个字符,但在那之后什么都没有。
猜你喜欢
  • 1970-01-01
  • 2016-03-03
  • 1970-01-01
  • 1970-01-01
  • 2020-10-15
  • 1970-01-01
  • 2022-01-12
  • 2020-02-10
  • 2014-05-05
相关资源
最近更新 更多