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

最近我已经看到很多这样的:

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

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

使用单引号当然是有效的( HTML 4.01,第3.2.2节 )。 我没有注意到这样的趋势,但也许有一些框架,强大的网站,你访问了恰好用单引号引用。

当使用双引号string文字的编程语言dynamic生成HTML时,我发现使用单引号是很方便的。

例如

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

使用PHP生成HTML时,可以更容易地执行如下操作:

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

而不是用一个string连接一个string与一个variables,因为PHP分析双引号string中的variables。

有人可能会在PHP中使用它来避免“如果它们使用双引号string来parsing其中的variables,或避免使用string连接运算符。

例:

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

代替

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

要么

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

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

当你想embedded双引号时更容易。

在ASP.NET中,如果在属性中使用数据绑定expression式 ,则使用单引号会更容易:

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

(X)HTML中的单引号是完全合法的。 另一方面,使用反斜杠来转义它们不是。 <img src=' http://widget-site-example.com/ross.jpg ' alt='Ross\'s Widget' />是一个带有alt文本“Ross \”的图像,空的sWidget / Widget'属性。 在HTML中转义撇号的正确方法是&#39;

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

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

单引号生成一个更干净的页面,更less的混乱。 你不应该在HTMLstring中转义它们,这是你的select使用…我的首选项通常是单引号,如果我需要在string中包含单引号(例如作为string内的string的分隔符),我用双引号为单一的另一个。

如果你想要html是有效的html4或xhtml,那么单引号或双引号将适用于属性。 HTML4可以在这里validation: https : //validator.w3.org/

如果您仅支持现代浏览器 ( 即10或更高版本),则可以使用允许使用单引号,双引号和无引号(只要属性值中没有特殊字符)的html5语法。 HTML5可以在这里validation: https : //validator.w3.org/nu

什么是反单引号?

只要你在当前标签中保持相同的引用风格(许多浏览器甚至不会抱怨这个,而validation只是想要,如果你从一个开始报价,以同样的规定结束)

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

我知道这是一个古老的线索,但仍然非常相关。

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

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

使用sprintf()允许通过从数据库或configuration文件中检索格式string或通过翻译机制来轻松修改格式string。

这是非常可读的,并允许生成的HTML中的双引号或单引号,几乎没有任何变化,也没有任何转义:

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

为什么不保存按SHIFT键。 less一个键盘敲击相同的青贮。

另一种情况,你可能想要使用单引号:在数据属性中存储JSON数据:

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

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

你应该完全避免报价。

在你的例子中,只有一个引用的属性实际上需要引号。

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

如果你使用引号,没有硬性的规则,但我最常见的是单引号,如果有必要的话在内部用双引号。

使用双引号不会通过一些validation器。