使用ob_get_clean设置的php变量是一个字符串,但不会转换为整数

时间:2017-01-31 02:50:10

标签: javascript php casting ob-start

我试图通过JavaScript获取浏览器时区,并使用ob_start()和ob_get_clean在php变量中捕获它。 ob_get_clean设置的值显示为字符串,但是当我尝试将其转换为php中的int时,该值将变为0.

无论我如何转换此字符串,(int)$ offset或intval($ offset)或$ offset * 1字符串都以420开头,但将其转换为整数的结果会将值更改为整数0.

<?php
    ob_start();
?>

<script>
    var d = new Date();
    document.write(d.getTimezoneOffset());
</script>

<?php
     $offset = trim(ob_get_clean());  // timezone offset Colorado = 420 minutes
     echo $offset;  // 420
     echo gettype($offset); // string
     $offset += 0;
     echo gettype($offset); // integer
     echo $offset; // shows 0 - I expect the value to be 420

我希望$ offset是一个值为420的整数。现在我尝试使用常规字符串的类似代码,我得到了预期的结果。

$strnum = '530';
echo gettype($strnum);  // string
$strnum += 0;
echo gettype($strnum);  // integer
echo $strnum;  // 530
?>

我不明白为什么这两个例子不起作用。

3 个答案:

答案 0 :(得分:2)

你不能这样,你不能在php中捕获JS脚本输出,你需要通过ajax调用传递它。检查页面的SOURCE OUTPUT而不是屏幕输出。

屏幕输出(在我的情况下):

-60 string integer 0 

REAL OUTPUT(SOURCE):

<script>
    var d = new Date();
    document.write(d.getTimezoneOffset());
</script>
string
integer
0

答案 1 :(得分:0)

为什么你不使用cast(int)或intval()函数

示例:

$var = (int) $yourstring

OR

$var = intval($youtstring)

答案 2 :(得分:0)

试试这个

 $offset = 'timezone offset Colorado = 420 minutes';  
 preg_match_all('!\d+!', $offset, $matches);
 echo $offset;  // 420
 print_r( $matches); //array
 echo $matches[0][0]; //420

 $matches[0][0] += 1;

 echo $matches[0][0];