0

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変数などを含む文字列を作成する必要があるため、スイッチにエコーしたくありません。

私はここで少し愚かかもしれません。

どうもありがとうございます!

4

2 に答える 2

1

これは実際には本当に簡単です。あなたはそれについて間違っている。2番目の例は、実際に必要なものです。文字列を作成するために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を含むテキストの大きなブロックを変数に割り当てられるようにしたいと思っています。これを行う最良の方法は、次のようなヒアドキュメント構文を使用することです。

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

ヒアドキュメント構文を使用すると、何もエスケープする必要はありません。開始タグと終了タグの間はすべてリテラルとして扱われるため、一重引用符と二重引用符でテキストを簡単に割り当てたり、補間を使用したりできます。

于 2012-11-14T20:34:21.470 に答える