HTML中是否允许使用单引号?

时间:2008-11-07 19:35:53

标签: 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时会出现问题?

11 个答案:

答案 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。