对HTML属性使用单引号是否正确?


69

最近,我看到了很多这样的东西:

<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中使用单引号成为常见的JavaScript样式,因为字符串将充满HTML和双引号。现在,我在JavaScript中键入了很多单引号字符串,以至于每当我使用Python,C#,C ++等其他语言时,我最终都会键入单引号并遇到语法错误😭–
gman

Answers:



46

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

例如

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

7
什么?您不喜欢String.Format(“ <a href="&ControlChars.Quote&"{0}"&ControlChars.Quote&"> {1} </a>”,Url,Desc)??? = P
StingyJack

String.Format(@“ <a href=""{0}""> {1} </a>”,Url,Desc),这可能是您可能要考虑的问题:)
Nikita Ignatov,2009年

5
或String.Format(“ <a href=\"{0}\"> {1} </a>”,Url,Desc)
missaghi

23
3个极端丑陋的完美例子:)
ThiefMaster 2011年

3
这是如何在您的站点中创建XSS漏洞的一个很好的例子
Sirens

12

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

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

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


比起盯着$ html =“ <img src = \” {$ url} \“ />”,它还容易。转义的报价都很容易忘记
-Sekhat

4
实际上,您也可以在php中将其反转:$ html ='<img src =“ $ url” />';
Kevin Laity

16
@KevinLaity,在PHP中使用单引号会使$ url打印为$ url,而不是变量内容:php.net/manual/en/language.types.string.php
bradlis7 2011年

替代方法也无法提高可读性:$html = '<img src="'.$url.'" />'
JimmyMcHoover

1
我使用格式化的字符串,例如sprintf('<img src="%s" />', $url)
Koen。

4

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

例:

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

代替

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

要么

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

如今,我一直坚持使用HTML的双引号和Javascript的单引号。


3

要嵌入双引号,会更容易。


3
如果您完全扭转这种情况,同样适用...所以不是一个很好的理由IMO
Joe Phillips

@JoePhillips并非总是如此,某些语言不允许您简单地“逆转情景”。例如,.NET将仅允许使用双引号定义字符串。
krowe2'2

@ krowe2这是真的。但是,如果您将JavaScript存储在C#字符串中,则可能是在做各种错误的事情
Joe Phillips

@JoePhillips我没有提到JS,但这只是这样做的一个原因,不,这样做没有错。一个常见的示例是出于缓存清除目的。Reponse.Write(String.Format("<script src='/js/myjs.js?{0}' type=text/javascript></script>", MakeUniqueStringFun()));如果这个示例不能像这样很好地工作,那么它将更好:<script src='/js/myjs.js?<%=MakeUniqueStringFun()%>' type=text/javascript></script>但是,一个示例的正确性实际上并不比另一个示例正确,并且显然,使用后面的方法,较长的JS代码片段变得笨拙。
krowe2



2

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

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

但是当您意识到这一点时,您已经在回声字符串中使用了双引号,因此您只需在字符串中使用单打。这一直在我身上发生。
DiegoDD

这还可以提高内存效率,因为它避免了创建新字符串。
安德里亚(Andrea)

这似乎根本无法回答问题。
krowe2 '17

2

您可能希望使用单引号的另一种情况:在数据属性中存储JSON数据:

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

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


1

单引号可以使页面更整洁,混乱程度更低。您不应该在HTML字符串中转义它们,这是您使用的选择...我的偏好通常是单引号,并且如果我需要在字符串中包含单引号(例如,用作字符串内字符串的定界符),我对一个使用双引号,对另一个使用单引号。



0

什么反对单引号?

您可以在html代码中使用单引号/双引号,而不会出现任何问题,只要您在当前标记中保持相同的引号样式(许多浏览器甚至都不会对此表示抱怨,并且验证只是希望您以引用,以相同的结尾,以相同的方式结束)

免费支持随机报价样式!!!(是的; D)


0

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

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

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

使用sprintf()可以通过从数据库或配置文件或通过转换机制检索格式字符串来轻松地对其进行修改。

它非常易读,并且允许在生成的HTML中使用双引号或单引号,而且几乎没有更改,并且绝对不能转义:

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


-7

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

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

<!-- 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>

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

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


必须使用引号,内容才有效html 4.01
Eric
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.