0

In PHP, we can escape to HTML in a switch statement like this:

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

Also, we can set variables:

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

But how can we escape the variable string like in this pseudo code?

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

I'd like to output a lot of HTML this way, but I don't want to echo it in the switch because I have to build a string later containing the $text variable and more.

I might be a bit stupid here.

Thank you very much!

4

2 回答 2

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;
?>
于 2012-11-14T20:29:31.730 回答
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 语法,您无需转义任何内容;开始和结束标记之间的所有内容都被视为文字,因此您可以轻松地为文本分配单引号和双引号并使用插值。

于 2012-11-14T20:34:21.470 回答