PHP 注入 HTML 中的 Switch 语句

发布于 2024-11-09 07:58:04 字数 418 浏览 0 评论 0原文

<? switch ($var): ?>
  <? case 1: ?>
    It's 1!
  <? break ?>
<? endswitch ?>

我想做类似的事情,换句话说,在 PHP 模板中使用 switch 语句。这可以通过 if 语句实现。上面的代码在 PHP 5.3 中生成解析错误:语法错误、意外的 T_INLINE_HTML、期望 T_ENDSWITCH 或 T_CASE 或 T_DEFAULTPHP 文档表明这应该是可能的。

有人可以确认这不起作用,或者更确切地说,告诉我我做错了什么?

谢谢。

<? switch ($var): ?>
  <? case 1: ?>
    It's 1!
  <? break ?>
<? endswitch ?>

I want to do something like that, in other words use the switch statement in PHP templates. This is possible with the if statement. The above code generates Parse error: syntax error, unexpected T_INLINE_HTML, expecting T_ENDSWITCH or T_CASE or T_DEFAULT in PHP 5.3. The PHP docs suggests that this should be possible.

Can someone confirm that this doesn't work, or rather, tell me what I'm doing wrong?

Thanks.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

相思故 2024-11-16 07:58:04

我在 php 文档中读到您的示例不应该工作。

switch 语句和 switch 语句之间的任何输出(包括空格)
第一种情况将导致语法错误。例如,这是无效的

请尝试以下操作:

<div>
<?php switch($variable): 
case 1: ?>
    <div>
    Newspage
    </div>
<?php break; ?>
<?php case 2: ?>
    </div>
    Forum
    <div>
<?php break; ?>
<?php endswitch; ?>
</div>

http://php.net/control-structs.alternative -语法

I read in the php doc that your example should not work.

Any output (including whitespace) between a switch statement and the
first case will result in a syntax error. For example, this is invalid

Try this instead:

<div>
<?php switch($variable): 
case 1: ?>
    <div>
    Newspage
    </div>
<?php break; ?>
<?php case 2: ?>
    </div>
    Forum
    <div>
<?php break; ?>
<?php endswitch; ?>
</div>

http://php.net/control-structures.alternative-syntax

涙—继续流 2024-11-16 07:58:04

?>\n\n<?

切换后,

switch($var):
echo "\n\t";
case 1:

将把您的脚本视为包含 HTML 的 PHP,而不是经过修饰的 HTML。 PHP 二进制文件首先获取文件。

您可能想使用 HEREDOC 之类的东西来回显未转义的 HTML。

You have

?>\n\n<?

after your switch which becomes

switch($var):
echo "\n\t";
case 1:

Think of your script as PHP with HTML in it, rather than embellished HTML. The PHP binary gets the file first.

You might like to use something like HEREDOC to echo out unescaped HTML.

你怎么这么可爱啊 2024-11-16 07:58:04

我使用这种“友好格式”。已测试并工作:

<? switch($var) : case 1 : ?>

  <p>One</p>

<? break; case 2 : ?>

  <p>Two</p>

<? break; case 3 : ?>

  <p>Three</p>

<? break; default : ?>

  <p>Default Value</p>

<? endswitch; ?>

I use this "friendly formatting". Tested and working:

<? switch($var) : case 1 : ?>

  <p>One</p>

<? break; case 2 : ?>

  <p>Two</p>

<? break; case 3 : ?>

  <p>Three</p>

<? break; default : ?>

  <p>Default Value</p>

<? endswitch; ?>
如果没有 2024-11-16 07:58:04

当使用 switch 或 foreach 语句以及在 php 5.6 上运行的新样式短标签时,我遇到了类似的问题。

就我而言:更改

<?=

  switch ($number_of_columns) {
    case "1":
        echo '<div class="col-sm-12 col-md-12" >';
        break;
    case "2":
        echo '<div class="col-sm-12 col-md-6" >';
        break;
    case "4":
        echo '<div class="col-sm-6 col-md-3" >';
        break;
    default:
        echo '<div class="col-sm-6 col-md-4" >';
    }
?>

 <?php 
      switch ($number_of_columns) {
        case "1":
            echo '<div class="col-sm-12 col-md-12" >';
            break;
        case "2":
            echo '<div class="col-sm-12 col-md-6" >';
            break;
        case "4":
            echo '<div class="col-sm-6 col-md-3" >';
            break;
        default:
            echo '<div class="col-sm-6 col-md-4" >';
        }
    ?>

不会导致语法错误,即语法错误,意外的“开关”(T_SWITCH)

I had a similar issue when using a switch or a foreach statement with the new style short tags running on php 5.6.

in my case: changing

<?=

  switch ($number_of_columns) {
    case "1":
        echo '<div class="col-sm-12 col-md-12" >';
        break;
    case "2":
        echo '<div class="col-sm-12 col-md-6" >';
        break;
    case "4":
        echo '<div class="col-sm-6 col-md-3" >';
        break;
    default:
        echo '<div class="col-sm-6 col-md-4" >';
    }
?>

to

 <?php 
      switch ($number_of_columns) {
        case "1":
            echo '<div class="col-sm-12 col-md-12" >';
            break;
        case "2":
            echo '<div class="col-sm-12 col-md-6" >';
            break;
        case "4":
            echo '<div class="col-sm-6 col-md-3" >';
            break;
        default:
            echo '<div class="col-sm-6 col-md-4" >';
        }
    ?>

resulted in no syntax error i.e. syntax error, unexpected 'switch' (T_SWITCH)

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文