【问题标题】:Concatenate HTML string and variable in PHP [closed]在 PHP 中连接 HTML 字符串和变量 [关闭]
【发布时间】:2017-12-01 22:35:47
【问题描述】:

这种连接HTML字符串和变量的解决方案并不方便,因为我们需要中断字符串:

$content = '<meta property="foo" url="' . $url . '" name="' . $name . '">'; 

而这个不是很方便,因为我们必须通过\" 逃脱":

$content = "<meta property=\"foo\" url=\"$url\" name=\"$name\">";

您会使用哪些其他解决方案(不需要额外的功能)来提高代码的可读性?


注意:不是heredoc相关问题的重复,因为我在这里寻找单行解决方案。

【问题讨论】:

  • 你知道你可以为 HTML 属性使用单引号 '...
  • 我投票结束这个问题,因为关于如何使工作代码更好地属于codereview.stackexchange.com/tour
  • 那么就跑题了,因为代码的可读性很大程度上是见仁见智的问题。
  • $content = "&lt;meta property='foo' url='$url' name='$name'&gt;"; 瞧,一个完全可读的字符串。
  • 只需将标记与标记一起使用并使用模板引擎,例如树枝

标签: php html


【解决方案1】:

对原始 HTML 使用单引号并在 PHP 变量周围使用花括号。像这样;

$content = "<meta property='foo' url='{$url}' name='{$name}'>";

【讨论】:

  • 谢谢!它甚至似乎可以在没有花括号的情况下工作:$content = "&lt;meta property='foo' url='$url' name='$name'&gt;";
  • 一个缺点@Mark:如果$name = "I don't know"; 它将不起作用,因为don't 的单引号会破坏代码。
  • 这是真的 - 你可以通过使用 htmlentities() 来解决这个问题。在将变量传递到 HTML 之前,您应该使用此方法处理变量。类似于$url = htmlentities($url, ENT_NOQUOTES) 的东西。 link了解更多详情
【解决方案2】:

你可以试试heredoc表示法:

    $content = <<<DOC
<meta property="foo" url="$url" name="$name">
DOC;

【讨论】:

    【解决方案3】:

    我建议你使用:

    $url = ...;
    $name = ...;
    $content = sprintf('<meta property="foo" url="%s" name="%s">', $url, $name);
    

    这是产生HTML markup 保持良好可读性的一种非常快速的方法。如果您不想使用附加功能,您唯一的解决方案是在外部使用双引号",并在HTML attributes 中使用单引号'。

    【讨论】:

    • 为什么投反对票,我 +1
    • @lloiacono — OP 明确排除了问题和 sprintf 中的其他功能,特别是在评论中。
    • 有一个连续投反对票的人@lloiacono ;)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-26
    • 1970-01-01
    • 2018-12-17
    相关资源
    最近更新 更多