2014-02-11 57 views
1

有沒有辦法'回聲'/'呈現HTML',而不必逃避每一個報價?PHP回聲而不必逃避引號

有點像下面的HTML如何被呈現,而不必使用echo或逃脫任何東西。

無視任何PHP語法錯誤,例如僅

<? if($a == $b) {;?> I said: "It's with quotes" <? ;} ?> 
<? else {;?> They said "It's still with quotes" <? ;} ?> 

這樣做的原因是我需要呼應同時使用單引號和雙引號的大型JavaScript文件,並會採取永遠逃脫他們所有。

回答

2

假設你只是想顯示(不運行)一些代碼,你可以使用任何這兩種方法:

  • Store中的JavaScript文件作爲一個單獨的文件,並使用file_get_contents()獲得代碼和代碼<pre>塊顯示它
  • 使用HEREDOC語法來存儲文件內容

方法#1:

$contents = file_get_contents('file.js'); 
echo '<pre>', $contents, '</pre>'; 

方法2:

$contents = <<<FILE 

... contents ... 

FILE; 

echo '<pre>', $contents, '</pre>'; 

我用第一種方法去雖然。這樣,您就不會用長實際用於頁面渲染的JavaScript代碼混淆您的腳本。把你的邏輯分成多個文件通常是個好主意。不過,在這兩種情況下,你根本不用擔心引用。

+0

第一種方法涉及文件I/O。這類似於從任何數據源加載數據。我並不是說這很糟糕。它看起來像OP正在尋找寫一些內聯文本,而不必逃避引號。 – crush

+0

@crush:沒有任何輸入。你只是在閱讀文件 - 僅此而已。 OP的問題的正確答案是「使用HEREDOC/NOWDOC」,但我只是想提供一種替代方法來避免代碼變得難以維護。 –

+1

我只是說在閱讀文件時涉及到開銷。這就是我所說的。我並沒有試圖作出判斷。 – crush

-1

可以使用相反的類型引號界定你的字符串:

echo "It's with quotes"; 
echo 'He said "Do it!"'; 

必須僅當它們是相同的用於分隔字符串的那些逃跑的報價。所以,如果你有這兩種類型的字符串中的引號,你需要逃避一些人:

echo 'They said "It\'s still with quotes"'; 

另一種解決方案,通常用於長塊,是定界符

echo <<<EOF 
They said "It's still with quotes" 
EOF; 
+3

使用兩種類型的引號。這是不同腳本的混搭。 –

+0

只要你喜歡,你可以混合搭配。 – Barmar

+1

這聽起來像OP不希望'逃脫其中一些'。 [Amal的回答](http://stackoverflow.com/a/21706765/1454048)在這一點上可能更好(他是第一個引用heredoc的人)。 – admdrew

3

您可以使用HEREDOC語法。

$str = <<<TEXT 
I said: "It's with quotes" 
TEXT; 

TEXT可以是任何東西,只要你使用它的開行和收線:

$str = <<<ANYTHING 
I said: "It's with quotes" 
ANYTHING; 
2

你可以使用所謂的HEREDOC(發音這裏DOC)。

下面是一個例子:

$js = <<<JAVASCRIPT 
var some = { 
    "javascript": 'here' 
}; 
JAVASCRIPT; 

你不需要逃避什麼,因爲你定義一個名爲分隔符。在這種情況下,分隔符是JAVASCRIPT。我建議你閱讀整個文檔頁面,並選擇最適合你的情況。例如PHP 5.3+提供了很好的nowdoc語法。

+2

多年來,我一直誤以爲這是(在我的頭上)* hair-a-dock *。哈哈... – crush

+2

@crush我曾經稱之爲'他重新文檔'。我認爲這是一個縮寫或什麼的。有一天,它只是在我面前打了我一拳。 –

+0

我認爲downvote必須來自你不能像'echo'那樣使用HEREDOC的事實。你需要首先將它存儲在一個變量中。 – crush