2012-11-14 54 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