我是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时会出现问题?
答案 0 :(得分:138)
这类似于When did single quotes in HTML become so popular?。 the specification允许使用HTML中属性的单引号。我认为任何浏览器都不会理解它们。
答案 1 :(得分:46)
正如PhiLho所指出的那样,虽然人们普遍认为单一引号不允许属性值,但这种看法是错误的。
XML standard允许在属性值周围使用单引号和双引号。
XHTML标准没有说任何改变它的内容,而是一个相关部分,其中指出attribute values must be quoted在示例中使用双引号,这可能会导致这种混淆。这个例子只是指出XHTML中的属性值必须满足XML中属性值的最低标准,这意味着它们必须被引用(与不关心的纯HTML相对),但不限制您使用单个或双引号。
当然,你总是有可能遇到一个不符合标准的解析器,但是当发生这种情况时,所有的赌注都会被取消。因此,最好只遵守规范所说的内容。毕竟,这就是为什么我们有规格。
答案 2 :(得分:14)
我听过有人说每个浏览器都无法识别HTML字段的单引号
那个人错了。
答案 3 :(得分:5)
不要相信你在互联网上看到的一切...... 有趣的是,我刚刚回答了类似于某人的事情,声称单引号在XHTML中无效......
嗯,我在打字的时候看上面,看到Adam N传播了同样的信念。如果他可以支持他的肯定,我会收回我写的内容...... AFAIK,XML是不可知的并接受这两种引用。我甚至尝试并验证了没有问题的XHTML页面只有单引号。答案 4 :(得分:4)
唯一的问题是数据会进入TEXT INPUT字段。考虑
<input value='it's gonna break'/>
同样:
<input value="i say - "this is gonna be trouble" "/>
你不能逃避,你必须使用htmlspecialchars
。
答案 5 :(得分:2)
我也倾向于在HTML中使用单引号,我从未遇到过问题。
答案 6 :(得分:1)
我在HTML页面中使用单引号并在其中嵌入了JavaScripts,它的工作正常。在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')};
答案 7 :(得分:1)
当我希望在规范的最新版本中找到有关此信息时,花了我很多时间才能找到它,这里是:
来自
HTML 5.3
编辑草稿,2018年10月18日
[...]
8.1.2.3。属性
单引号属性值语法属性名称,后跟零个或多个空格字符,后跟一个U + 003D等于符号字符,后跟零个或多个空格字符,后跟一个U + 0027 APOSTROPHE字符('),后跟属性值,除了上面对属性值的要求之外,不得包含任何文字U + 0027 APOSTROPHE字符('),最后不能包含第二个单个U + 0027 APOSTROPHE字符(')。
在下面的示例中,type属性使用单引号属性值语法给出:
<input type='checkbox'>
如果使用单引号属性语法的属性后面是另一个属性,则必须有一个空格字符将两者分开。
http://w3c.github.io/html/single-page.html#elements-attributes
答案 8 :(得分:-1)
最近,我遇到了Google搜索优化问题。如果只有一个引号,它似乎不会抓取链接的页面。
答案 9 :(得分:-2)
......或者只是使用heredocs。然后你不必担心逃避END
以外的任何事情。
答案 10 :(得分:-9)
单引号适用于HTML,但它们不能生成有效的XHTML,如果有人使用仅支持XHTML但不支持HTML的浏览器,则可能会出现问题。我不相信任何这样的浏览器存在,虽然可能有一些用户代理需要严格的XHTML。