我试图从一个函数中获取一个数字,该函数只回显文本而不是将其返回到变量,如下所示:
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编码。
我不确定如何解决这个问题,但非常感谢任何建议或见解!非常感谢提前!
答案 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_...
返回正确的值而不是输出字符串?)