不能将ob_get_clean() string转换为整数,表示输出是一个18个字符的字符串


Can't make ob_get_clean() string into an integer, says output is an 18-character string

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

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

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

但是,运行var_dump($thisIDnumber)输出如下:string(18)"7"(假设数字是7,尽管var_dump()报告一个18个字符的字符串,而不管数字是多少。)

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

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

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

如果函数打印大量空白(空格,制表符甚至回车)并且您通过web浏览器检查var_dump()的输出(因此它呈现为HTML和空格被折叠),则可以解释string(18)部分。然而,转换为number应该忽略常规的前导空格。所以可能还有其他不可打印的字符

试试这个:

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]

: - ?

你没有提供太多的信息,所以这是在黑暗中拍摄。

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

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