【问题标题】:Is it correct to use single quotes for HTML attributes?对 HTML 属性使用单引号是否正确?
【发布时间】:2010-09-19 13:21:54
【问题描述】:

最近我看到很多这样的:

<a href='http://widget-site-example.com/example.html'>
    <img src='http://widget-site-example.com/ross.jpg' alt='Ross&#39;s Widget' />
</a>

在 HTML 中使用单引号是否有效?正如我在上面强调的那样,这也是有问题的,因为您必须避开撇号。

【问题讨论】:

  • 我希望这个开始流行起来!因为双引号更流行,所以在 JavaScript 中使用单引号成为常见的 JavaScript 样式,因为字符串将充满带有双引号的 HTML。现在我在 JavaScript 中输入了很多单引号字符串,以至于每当我使用 Python、C#、C++ 等其他语言时,我最终都会输入单引号并出现语法错误????

标签: html syntax coding-style apostrophe


【解决方案1】:

使用单引号(HTML 4.01, section 3.2.2)当然是有效的。我没有注意到这种趋势,但也许有一些框架可以为您访问过的网站提供支持,而这些网站恰好使用单引号进行引用。

【讨论】:

  • 有趣的是,主要是提供外部代码的网站 - 例如 Ohloh 的统计图像或pushuptheweb.com
  • Google 字体库现在提供带单引号的示例代码:google.com/webfonts
【解决方案2】:

我发现在使用使用双引号字符串文字的编程语言动态生成 HTML 时,使用单引号很方便。

例如

String.Format("<a href='{0}'>{1}</a>", Url, Desc)

【讨论】:

  • 什么?你不喜欢 String.Format("{1}", Url, Desc) ??? =P
  • String.Format(@"{1}", Url, Desc) 这就是你可能会考虑的 :)
  • 或 String.Format("{1}", Url, Desc)
  • 极端丑陋的三个完美例子:)
  • 这是一个很好的例子,说明如何在您的站点中创建 XSS 漏洞
【解决方案3】:

使用 PHP 生成 HTML 时,可以更轻松地执行以下操作:

$html = "<img src='$url' />";

而不是将字符串与变量与字符串连接起来,因为 PHP 会解析双引号字符串中的变量。

【讨论】:

  • 也比盯着 $html = "";因为转义引号很容易忘记
  • 其实你也可以在php中反转它:$html = '';
  • @KevinLaity,在 PHP 中使用单引号会使 $url 打印为 $url,而不是变量内容:php.net/manual/en/language.types.string.php
  • 替代方案也不会使其更具可读性:$html = '&lt;img src="'.$url.'" /&gt;'
  • 我使用格式化字符串,例如sprintf('&lt;img src="%s" /&gt;', $url)
【解决方案4】:

有人可能会在 PHP 中使用它来避免转义 " 如果他们使用双引号字符串来解析其中的变量,或者避免使用字符串连接运算符。

例子:

echo "<input type='text' value='$data'/>";

而不是

echo "<input type=\"text\" value=\"$data\" />";

echo '<input type="text" value="' . $data . '" />';

现在我总是坚持对 HTML 使用双引号,对 Javascript 使用单引号。

【讨论】:

    【解决方案5】:

    当你想嵌入双引号时会更容易。

    【讨论】:

    • 如果你完全颠倒场景,同样适用......所以不是一个很好的理由 IMO
    • @JoePhillips 并非总是如此,有些语言不允许您简单地“反转情景”。例如,.NET 将只允许使用双引号定义字符串。
    • @krowe2 这是真的。但是,如果您将 javascript 存储在 C# 字符串中,您可能会做各种错误的事情
    • @JoePhillips 我没有提到 JS,但这只是这样做的一个原因,不,这样做没有任何问题。一个常见的示例是用于缓存清除目的。 Reponse.Write(String.Format("&lt;script src='/js/myjs.js?{0}' type=text/javascript&gt;&lt;/script&gt;", MakeUniqueStringFun())); 这个例子如果不能像这样工作会更好:&lt;script src='/js/myjs.js?&lt;%=MakeUniqueStringFun()%&gt;' type=text/javascript&gt;&lt;/script&gt; 但一个并不比另一个更正确,很明显,较长的 JS 的 sn-ps 使用后者变得笨拙方法。
    【解决方案6】:

    在 ASP.NET 中,如果您在属性中使用 data-binding expressions,则使用单引号会更容易:

    <asp:TextBox runat="server" Text='<%# Bind("Name") %>' />
    

    【讨论】:

      【解决方案7】:

      另一种可能需要使用单引号的情况:将 JSON 数据存储在数据属性中:

      <tr data-info='{"test":true}'></tr>
      

      JSON 对象键必须用双引号括起来,所以属性本身不能。

      【讨论】:

        【解决方案8】:

        单引号在 (X)HTML 中是完全合法的。另一方面,使用反斜杠来逃避它们不是。 &lt;img src='@987654321@' alt='Ross\'s Widget' /&gt; 是带有替换文字“Ross\”的图像,sWidget/Widget' 属性为空。在 HTML 中转义撇号的正确方法是 &amp;#39;

        【讨论】:

        • 单引号在 XHTML 中并不完全合法。
        • 单引号是合法的 XHTML,不是吗?
        【解决方案9】:

        在 PHP 中,echo 有多个参数。因此,如果想省略连接运算符,他们可以做类似的事情并且仍然使用双引号:

        echo '<input type="text" value="', $data, '" />';
        

        【讨论】:

        • 但是当你意识到这一点时,你已经用双引号开始了你的 echo 字符串,所以你只需在字符串中使用单引号。这一直发生在我身上。
        • 这也更节省内存,因为它避免了创建新字符串。
        • 这似乎根本无法回答问题。
        【解决方案10】:

        单引号生成更简洁的页面,更简洁。你不应该在 HTML 字符串中转义它们,使用哪个是你的选择......我的偏好通常是单引号,如果我需要在字符串中包含单引号(例如,作为字符串中字符串的分隔符),我对一个使用双引号,对另一个使用单引号。

        【讨论】:

          【解决方案11】:

          如果您希望 是有效的,那么 都适用于属性。 HTML4 可以在这里验证:https://validator.w3.org/

          如果您是supporting only modern browsers 和更高版本),那么您可以使用 语法,该语法允许单引号、双引号和无引号(只要属性值中没有特殊字符)。 HTML5 可以在这里验证:https://validator.w3.org/nu

          【讨论】:

            【解决方案12】:

            什么是反对单引号?

            你可以毫无问题地在你的 html 代码中使用单引号/双引号,只要你在当前标签中保持相同的引用样式(许多浏览器甚至不会抱怨这一点,验证只是想要,如果你以引号开头,以相同的结尾,在相同的礼节内)

            免费支持随机引用样式!!! (耶;D)

            【讨论】:

              【解决方案13】:

              我知道这是一个旧线程,但仍然非常相关。

              如果您想控制生成的 HTML 中的引号,可以使用 PHP 中的 sprintf() 函数(以及许多其他语言中可用的类似调用):

              $html = sprintf('<a href="%s">%s</a>', $url, $text);
              

              使用 sprintf() 可以通过从数据库或配置文件中检索格式字符串或通过翻译机制轻松修改格式字符串。

              它非常易读,并且允许在生成的 HTML 中使用双引号或单引号,几乎没有任何变化,而且从不转义:

              $html = sprintf("<a href='%s'>%s</a>", $url, $text);
              

              【讨论】:

                【解决方案14】:

                为什么不按 SHIFT 键保存。相同里程减少一次击键。

                【讨论】:

                • 哈!最好的一般原因,我见过。
                【解决方案15】:

                让我们永远解决这个争论


                1. 双引号可以
                2. 单引号可以
                3. 没有引号 是可以的,只要您没有以下字符之一:
                  • 空格(显然)
                  • “”(有意义)
                  • 等号(不知道为什么但是没问题)
                  • 任何类型的引用:双引号、单引号、反引号(同样,有意义)

                有趣的是,即使在今天,有些人仍然坚持“仅双引号”标准,这从来都不是真正的标准,而是一种惯例。此外,如果您的语言将撇号作为自然元素(英语,任何人?),它会更方便,但在我看来,增加 PHP 字符串组合的复杂性的代价太高了。

                【讨论】:

                  【解决方案16】:

                  您应该完全避免使用引号。

                  在您的示例中,只有一个带引号的属性实际上需要引号。

                  <!-- best form -->
                  <a href=http://widget-site-example.com/example.html>
                    <img src=http://widget-site-example.com/ross.jpg alt='Ross&#39;s Widget' />
                  </a>
                  

                  如果您确实使用引号,则没有硬性规定,但我见过最常见的单引号,必要时在内部使用双引号。

                  使用双引号不会通过某些验证器。

                  【讨论】:

                  • 内容需要引用才能有效html4.01
                  猜你喜欢
                  • 2011-04-29
                  • 1970-01-01
                  • 2011-04-30
                  • 2010-09-21
                  • 2011-01-26
                  • 1970-01-01
                  • 2014-01-20
                  相关资源
                  最近更新 更多