2012-11-14 75 views
0

在PHP中,我們可以逃脫HTML在這樣的switch語句:逃生PHP開關變量字符串

<?php 
    switch($example) { 
     case 'caseone': { ?> <p>Case one</p> <?php } break; 
     case 'casetwo': { ?> <p>Case two</p> <?php } break; 
    } 
?> 

而且,我們可以通過設置變量:

<?php 
    switch($example) { 
     case 'caseone': $text = 'Case one'; break; 
     case 'casetwo': $text = 'Case two'; break; 
    } 
?> 

但我們如何能逃脫像這個僞代碼中的變量字符串?

<?php 
    switch($example) { 
     case 'caseone': $text = { ?> Case one <?php } break; 
     case 'casetwo': $text = { ?> Case two <?php } break; 
    } 
?> 

我想輸出很多HTML的這種方式,但我不希望它呼應的開關 ,因爲我要建立以後包含$文本變量和更多的字符串。

我可能在這裏有點愚蠢。

非常感謝!

回答

1

這其實很簡單。你是錯的。你的第二個例子是你實際需要的。您不需要爲了構建字符串而「轉義」HTML(特別是如果您稍後想要echo)。如果您想刪除任何XSS攻擊的可能性,則可以使用htmlspecialchars來轉義HTML。

<?php 
    switch($example) { 
     case 'caseone': $text = "HTML string here"; break; 
     case 'casetwo': $text = "Other HTML string here"; break; 
    } 
echo $text; 
?> 
+0

這已經在那裏,看到第二個例子,其實他在他的問題中有一個答案,在這裏沒有什麼可以逃脫 –

+0

這樣做。謝謝!現在看起來很明顯。但是如果我想要,我可以逃脫嗎?我的文本編輯器沒有語法突出顯示字符串中的內容。 – bchr

+0

@bchr很高興幫助(不要忘記upvote/accept!)。據我所知,你不能以這種方式「逃避」它。你可能想看看升級到IDE。 – SomeKittens

0

從我的理解你的問題,你想能夠分配一大塊文本,可能包含HTML,變量。要做到這一點,最好的辦法是用定界符語法如下:

<?php 
switch($example) { 
    case 'caseone': 
     $text = <<<EOT 
Case one 
Some <a href="link">HTML</a> 
EOT; 
     break; 
    case 'casetwo': 
     $text = <<<EOT 
Case two 
Some other <a href="link2">HTML</a> 
EOT; 
     break; 
} 
?> 

隨着定界符語法,你不需要逃避任何東西;開始和結束標籤之間的所有內容都被視爲文字,因此您可以輕鬆地使用單引號和雙引號分配文本並使用插值。

+0

感謝您的回答!我會研究一下。大拇指! – bchr