将print_r作为字符串返回(PHP)

时间:2013-09-23 17:54:13

标签: php

我这样做是否正确?据我了解,如果我在调用print_r时将“return”值定义为true,则应该返回一个字符串。我有以下功能:

function alert($string) {
    echo '<script>alert("' . $string . '");</script>';
}

当我将这个函数传递给一个普通的旧引号包装的字符串时,它的效果很好而且花花公子,但当我把它喂它时:

alert(print_r($array,true));

没有任何反应,我没有看到错误,但回显print_r($ array,true)有效。感谢您提供的任何帮助,我只是想了解这里出了什么问题,尽管这显然是一个非常小的问题。

3 个答案:

答案 0 :(得分:2)

使用

<script>
    alert(<?php echo json_encode(print_r($array, true)); ?>);
</script>

代替。注意使用json_encode - 这是为了防止任何'或其他JS元字符引入JS语法错误,例如:

<?php
$name = "Miles O'Brien"; // note the '-quote in there
?>

<script>
alert('<?php echo $name ?>');
</script>

会给你:

alert('Miles O'Brien');
      ^-- start of string
              ^--end of string
               ^^^^-- unknown variable/function.

答案 1 :(得分:1)

您的警报功能在处理该输入时存在两个问题。 首先,如你所说,你的JS缺少qutes。 其次,新行应转换为字符串'\ n'。否则你对警报功能的调用(在js中)将以另一行结束,这是不正确的。例如:

    alert("hello
    world");

语法无效。

所以,这个警报功能可能会起作用:

    function alert($string) {
        $string=preg_replace('/\n/m','\\n',$string);
        echo '<script>alert("' . $string . '");</script>';
    }

答案 2 :(得分:0)

print_r(以及var_dump)将其内容输出到stdout。但是,您可以使用PHP的缓冲区控制此行为。

查看What is output buffering?,然后http://www.php.net/manual/en/ref.outcontrol.php