无法将ob_get_clean()字符串转换为整数,输出是一个18个字符的字符串

时间:2011-12-01 19:21:11

标签: php integer output-buffering

我试图从一个函数中获取一个数字,该函数只回显文本而不是将其返回到变量,如下所示:

ob_start();
function_to_get_id_number();
$thisIDnumber = ob_get_clean();

如果我回显$thisIDnumber变量,则在HTML输出中打印所需的数字。

但是,运行var_dump($thisIDnumber)输出以下内容: string(18)“7” (假设数字是7,尽管var_dump()报告的是18个字符的字符串,无论数字是多少。)

任何将字符串转换为整数的尝试(例如(int)$thisIDnumberint_val($thisIDnumber)$thisIDnumber = 0+$thisIDnumber都会失败,输出为0)

运行mb_detect_encoding($thisIDnumber)报告字符串为ASCII编码。

我不确定如何解决这个问题,但非常感谢任何建议或见解!非常感谢提前!

2 个答案:

答案 0 :(得分:1)

如果函数打印了大量空白区域(空格,制表符甚至回车),并且通过Web浏览器检查var_dump()的输出,则可以解释string(18)部分(因此它呈现为HTML和空格已折叠)。但是,转换为数字应忽略常规前导空格。所以可能还有其他一些不可打印的角色。

试试这个:

ob_start();
function_to_get_id_number();
$thisIDnumber = ob_get_clean();

var_dump($thisIDnumber, bin2hex($thisIDnumber));

十六进制代码应该为您提供字符串内部内容的线索。

<强>更新

$data = '5b777073635f63617465676f72795f69645d';

for($i=0, $len=strlen($data); $i<$len; $i+=2){
    echo chr(hexdec(substr($data, $i, 2)));
}

...打印出来:

[wpsc_category_id]

: -

答案 1 :(得分:0)

你没有提供太多的信息,所以这是一个黑暗的镜头。

你为什么不试试这个: 如果id根据定义是数字,则通过使用正则表达式删除其他所有内容来强制执行。

(正如jproffit在他对你的问题的评论中写道:关于function_to_get_id_number()的更多信息会很好。为什么你需要首先缓冲输出?不能function_to_...返回正确的值而不是输出字符串?)