2013-09-23 59 views
1

我正确地做这件事吗?据我了解,如果我在调用print_r时将“返回”值定义为true,它应该返回一个字符串。我有以下功能:返回print_r作为字符串(PHP)

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

当我传递函数一个普通的旧引号encapsed字符串,它工作得非常愉快,但是当我给它这样的:

alert(print_r($array,true)); 

什么也没有发生并且我没有看到错误,但print_r($ array,true)的作用。感谢您提供的任何帮助,我只是试图了解这里出了什么问题,尽管这显然是一个很小的问题。

+1

确定'$ array'包含什么?查看页面源代码以查看输出结果。 – Xeoncross

+0

确切地说,如果'$ array'为null,那么你将得不到任何回报 – Yang

+0

@Xeoncross这将返回'Array()'。 – Pietu1998

回答

1

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

alert("hello 
    world"); 

是无效的语法。

所以,这提示功能可能会工作:

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

工作正常!你是男人。 –

+0

这适用于字符串,但会失败的数组。例如:'alert(array('foo','bar'));' –

+0

对,我当然知道。显然,如果它是一个字符串,可以将其设置为仅打印,或者将其放在print_r中,并在它是数组时返回一个字符串。 –

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. 
+0

对,当然我可以做到这一点,但这不是功能的要点。关键是要有一点便利的功能来节省我几行。无论如何,我发布的真正原因是了解问题的原因,而不仅仅是解决问题。 –

0

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

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

+1

您可以(或者)将'print_r'的第二个参数设置为'true',以使其返回字符串而不是将其转储到stdout。 – SamT

+0

谢谢。它更干净。彻底阅读文档是值得的。 – lilly