转义PHP开关变量字符串

时间:2012-11-14 20:27:03

标签: php escaping switch-statement case

在PHP中,我们可以在这样的switch语句中转义为HTML:

<?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,但我不想在交换机中回显它 因为我必须在以后构建一个包含$ text变量的字符串。

我可能在这里有点蠢。

非常感谢!

2 个答案:

答案 0 :(得分: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;
?>

答案 1 :(得分:0)

根据我对您的问题的理解,您希望能够将大块文本(可能包含HTML)分配给变量。最好的方法是使用这样的heredoc语法:

<?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;
}
?>

使用heredoc语法,您不需要转义任何内容;开始标记和结束标记之间的所有内容都被视为文字,因此您可以轻松地使用单引号和双引号分配文本并使用插值。