我这样做是否正确?据我了解,如果我在调用print_r时将“return”值定义为true,则应该返回一个字符串。我有以下功能:
function alert($string) {
echo '<script>alert("' . $string . '");</script>';
}
当我将这个函数传递给一个普通的旧引号包装的字符串时,它的效果很好而且花花公子,但当我把它喂它时:
alert(print_r($array,true));
没有任何反应,我没有看到错误,但回显print_r($ array,true)有效。感谢您提供的任何帮助,我只是想了解这里出了什么问题,尽管这显然是一个非常小的问题。
答案 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。