【问题标题】:How to use single quotes within double quotes in PHP?如何在 PHP 中的双引号内使用单引号?
【发布时间】:2012-03-26 13:16:45
【问题描述】:

在 PHP 中创建链接:

echo "<a href=\"$currentFile?rowID=$row['id']\">click here</a>";

这会引发错误:Parse error: parse error, expecting 'T_STRING' or 'T_VARIABLE' or 'T_NUM_STRING'。你怎么能这样做?

此外,混合单引号和双引号以及转义双引号会降低可读性并且总是会产生错误。有没有更好的方法来使用另一种语法创建引号,例如 Ruby 中的 %Q()?

工作 PHP 5.2.8。

【问题讨论】:

  • 这不是必需的,但我更喜欢这样做:echo '&lt;a href="'.$currentFile.'?rowID='.$row['id'].'"&gt;click here&lt;/a&gt;';
  • 同意,这样可以更清楚地从变量中分隔字符串。
  • @andrewjackson - 我也是这样做的,但我发现它很难阅读并且容易出错。
  • @BSeven Jw,但是您使用的是带有语法高亮功能的代码编辑器吗?
  • @andrewjackson - 是的,Dreamweaver。

标签: php string escaping quotes


【解决方案1】:

像这样{$currentFile}{$row['id']}将变量括在{}中。

【讨论】:

    【解决方案2】:

    问题是您的数组变量插值。语法是

    "$row[id]"
    

    "{$row['id']}"
    

    所以:

    "<a href=\"$currentFile?rowID=$row[id]\">click here</a>"
    

    http://php.net/manual/en/language.types.string.php#language.types.string.parsing

    【讨论】:

      【解决方案3】:

      对于双引号内的命名数组,不应使用单引号:

      echo "<a href=\"$currentFile?rowID=$row[id]\">click here</a>";
      

      【讨论】:

        【解决方案4】:

        sprintf 是您处理带有变量的复杂字符串的朋友:

        http://php.net/manual/en/function.sprintf.php

        echo sprintf('<a href="%s?rowID=%d">click here</a>', $currentFile, $row['id']);
        

        这里我假设 $currentFile 是一个字符串(您可以进一步操作该字​​符串,也许使用 urlencode)并且 $row['id'] 是一个整数。

        【讨论】:

          【解决方案5】:

          如果引号变得令人困惑,可以尝试使用heredoc语法:

          echo <<< END_HTML
              <a href="$currentFile?rowID=$row[id]">click here</a>
          END_HTML;
          

          ...只要确保 END_HTML; 单独在一行上,没有缩进和尾随空格。在这里,heredoc 是多余的。但对于包含大量变量的较大 HTML 块,它比到处转义引号要容易得多。

          PHP heredoc

          干杯

          【讨论】:

            【解决方案6】:

            为了清楚起见,我建议您在单引号中回显 HTML 代码,并在双引号中回显它们的标签。当其他人查看您的代码时,大量的转义引号会使它看起来很复杂。

            例如

            echo '<a id="testlink" alt="blabla" href="test.php?somevar='.$xy.'">Test</a>';
            

            【讨论】:

              猜你喜欢
              • 2013-02-05
              • 2018-06-13
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多