2013-09-23 61 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