HTML 中是否允许单引号?

我非常喜欢在 PHP 中使用双引号,这样我就可以插入变量而不是串联字符串。因此,在生成 HTML 时,我经常使用单引号来设置标记字段。例如:

$html = "<input type='text' name='address' value='$address'>";

这对我来说比任何一个都更容易理解

$html = "<input type=\"text\" name=\"address\" value=\"$address\">";

或者

$html = '<input type="text" name="address" values="' . $address . '">' ;

通过简短的搜索,我听到有人说 HTML 字段的单引号不是每个浏览器都能识别的。因此,我想知道什么浏览器会有识别单引号 HTML 的问题?

78812 次浏览

这与 什么时候 HTML 中的单引号变得如此流行了?类似。在 HTML 中,围绕属性的单引号是且始终是 说明书所允许的。我不认为任何浏览器不会理解他们。

我也倾向于在 HTML 中使用单引号,我从来没有遇到过问题。

我听人们说,HTML 字段的单引号不是每个浏览器都能识别的

那个人错了。

单引号对于 HTML 来说很好,但是它们不能生成有效的 XHTML,如果有人使用的浏览器只支持 XHTML,而不支持 HTML,那么这可能是个问题。我不相信有这样的浏览器存在,尽管可能有一些用户代理确实需要严格的 XHTML。

不要相信你在网上看到的一切..。
有趣的是,我刚刚回答了一些类似于某人声明单引号在 XHTML 中无效的问题..。

嗯,我打字的时候往上看,发现 Adam N 传播着同样的信念。如果他能支持他的肯定,我收回我写的... ... AFAIK,XML 是不可知论的,接受这两种引用。我甚至毫无问题地尝试和验证了一个只有单引号的 XHTML 页面。

正如 PhilLho 指出的那样,尽管有一种广泛流传的观点认为单引号不允许用于属性值,但这种观点是错误的。

XML 标准允许在属性值周围使用单引号和双引号。

XHTML 标准没有说明任何改变这一点的内容,但是有一个相关的部分指出,必须引用属性值在示例中使用了双引号,这可能导致了这种混淆。这个例子只是指出 XHTML 中的属性值必须满足 XML 中属性值的最低标准,这意味着它们必须被引用(相对于不在乎的普通 HTML) ,但是并不限制您使用单引号或双引号。

当然,您总是有可能遇到不符合标准的解析器,但是当这种情况发生时,所有的赌注都将打水漂。所以最好还是按照说明书上说的去做。这就是为什么我们有说明书。

唯一的问题是数据进入文本输入字段

<input value='it's gonna break'/>

同理:

<input value="i say - "this is gonna be trouble" "/>

你不能逃避,你必须使用 htmlspecialchars

... 或者只是使用 Herdocs。那么你不需要担心逃脱除 END以外的任何东西。

我在 HTML 页面中使用了单引号,并在其中嵌入了 JavaScript。在 IE9,Chrome 和 Firefox 中测试-看起来运行良好。

<!DOCTYPE html>
<html>
<head>
<meta charset='utf-8'>
<meta http-equiv='X-UA-Compatible' content='IE=edge,chrome=1'>
<title>Bethanie Inc. data : geographically linked</title>
<script src='http://ajax.googleapis.com/ajax/libs/jquery/1.9.0/jquery.min.js'></script>
<script src='https://maps.googleapis.com/maps/api/js?v=3.11&sensor=false' type='text/javascript'></script>
<script type='text/javascript'>
// check DOM Ready
$(document).ready(function() {
// execute
(function() {
/////////////// Addresses ///////////////////
var locations = new Array();
var i = 0;
locations[i++] = 'L,Riversea: Comp Site1 at Riversea,1 Wallace Lane Mosman Park WA 6012'
locations[i++] = 'L,Wearne: Comp Site2 at Wearne,1 Gibney St Cottesloe WA 6011'
locations[i++] = 'L,Beachside:Comp Site3 Beachside,629 Two Rocks Rd Yanchep WA 6035'


/////// Addresses/////////
var total_locations = i;
i = 0;
console.log('About to look up ' + total_locations + ' locations');
// map options
var options = {
zoom: 10,
center: new google.maps.LatLng(-31.982484, 115.789329),//Bethanie
mapTypeId: google.maps.MapTypeId.ROADMAP,
mapTypeControl: true
};
// init map
console.log('Initialise map...');
var map = new google.maps.Map(document.getElementById('map_canvas'), options);
// use the Google API to translate addresses to GPS coordinates
//(See Limits: https://developers.google.com/maps/documentation/geocoding/#Limits)
var geocoder = new google.maps.Geocoder();
if (geocoder) {
console.log('Got a new instance of Google Geocoder object');
// Call function 'createNextMarker' every second
var myVar = window.setInterval(function(){createNextMarker()}, 700);
function createNextMarker() {
if (i < locations.length)
{
var customer = locations[i];
var parts = customer.split(','); // split line into parts (fields)
var type= parts.splice(0,1);    // type from location line (remove)
var name = parts.splice(0,1);    // name from location line(remove)
var address =parts.join(',');   // combine remaining parts
console.log('Looking up ' + name + ' at address ' + address);
geocoder.geocode({ 'address': address }, makeCallback(name, type));
i++; // next location in list
updateProgressBar(i / total_locations);




} else
{
console.log('Ready looking up ' + i + ' addresses');
window.clearInterval(myVar);
}
}


function makeCallback(name,type)
{
var geocodeCallBack = function (results, status) {
if (status == google.maps.GeocoderStatus.OK) {
var longitude = results[0].geometry.location.lng();
var latitude = results[0].geometry.location.lat();
console.log('Received result: lat:' + latitude + ' long:' + longitude);
var marker = new google.maps.Marker({
position: new google.maps.LatLng(latitude, longitude),
map: map,
title: name + ' : ' + '\r\n' + results[0].formatted_address});// this is display in tool tip/ icon color
if (type=='E')  {marker.setIcon('http://maps.google.com/mapfiles/ms/icons/green-dot.png')};

最近我遇到了一个谷歌搜索引擎优化的问题。如果有一个单引号,它似乎不抓取链接页面。

当我在 规范的最新版本中寻找这方面的信息时,我花了相当长的时间才找到它,下面是:

超文本标示语言

生活水平ー2021年9月17日最后更新

[...]

13.1.2.3属性

单引号属性值语法

属性名后面跟着零个或多个 ASCII 空格,后面跟着一个 U + 003 D EQUALS SIGN 字符,后面跟着零个或多个 ASCII 空格,后面跟着一个 U + 0027 APOSTROPHE 字符(’) ,后面跟着属性值,除了上面给出的属性值的要求外,它不能包含任何文字 U + 0027 APOSTROPHE 字符(’) ,最后跟着第二个 U + 0027 APOSTROPHE 字符(’)。
在下面的示例中,type 属性使用单引号属性值语法给出:

<input type='checkbox'>

如果使用单引号属性语法的属性后面跟着另一个属性,那么必须使用 ASCII 空格分隔这两个属性。

Https://html.spec.whatwg.org/#attributes-2