【问题标题】:Can't make ob_get_clean() string into an integer, says output is an 18-character string无法将 ob_get_clean() 字符串转换为整数,表示输出是 18 个字符的字符串
【发布时间】:2011-12-01 19:21:11
【问题描述】:

我正在尝试从仅回显文本而不是将其返回到变量的函数中获取数字,如下所示:

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 编码的。

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

【问题讨论】:

  • function_to_get_id_number() 输出了什么?是否有任何可能无意中输出的新行?
  • 使用nl2br() 输出$thisIDnumber 不会插入任何<BR /> 标签,并且在<!-- Comment Block --> 内使用print_r() 也不会显示任何额外的空白或新闻行。跨度>
  • 出于好奇,为什么function_to_get_id_number() 必须回显而不是返回?

标签: php integer output-buffering


【解决方案1】:

string(18) 部分可以解释为如果函数打印大量空白(空格、制表符甚至回车)并且您通过 Web 浏览器检查 var_dump() 的输出(因此它呈现为 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]

:-?

【讨论】:

  • 我已经按照您的建议尝试了var_dump($thisIDnumber, bin2hex($thisIDnumber));,HTML 打印以下内容:string(18) “7″ string(36) “5b777073635f63617465676f72795f69645d” 我尝试在字符串上使用trim($thisIDnumber)preg_replace("/[\n\r]/","",$thisIDnumber) 来删除任何新的行或空白,两者都没有任何效果。使用nl2br() 输出到 HTML 也不会插入
    标签,所以我不确定空格或换行是否是问题所在。还有其他建议吗?感谢您迄今为止的帮助!
【解决方案2】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-19
    • 1970-01-01
    相关资源
    最近更新 更多