HTML'de tek tırnaklara izin veriliyor mu?


146

Ben dizeleri bitiştirmek yerine değişkenleri enterpolate böylece PHP çift tırnak kullanarak büyük bir zaman kullanıcısıyım. Sonuç olarak, HTML oluştururken genellikle etiket alanlarını ayarlamak için tek tırnak kullanıyorum. Örneğin:

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

Şimdi bu benim için ikisinden de daha okunaklı

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

veya

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

Kısa aramalardan insanların HTML alanları için tek tırnakların HER tarayıcı tarafından tanınmadığını söylediğini duydum. Böylece hangi tarayıcılar tek teklif HTML tanıma sorunları olurdu merak ediyorum?


Yanıtlar:


149

Bu, HTML'deki tek tırnak ne zaman popüler hale geldi? . HTML'deki öznitelikler etrafında tek tırnak işaretleri belirtimine izin verilir ve her zaman izin verilir . Hiçbir tarayıcının onları anlamayacağını sanmıyorum.


13
Burada bahsetmem gereken bir şey, bazı HTML istemcileri (gerekli tarayıcılar) tek tırnak üzerinde uyumlu sorunları var. Garip bir örnek, Hotmail'de <img src='cid:xxx' ... />satır içi bir resim göstermek için kullanırsanız , içerik kimliği yok sayıldığı için hiç görünmeyecek olmasıdır. Bunun yerine `<img src =" cid: xxx "... /> kullanmalısınız.
Dünya Motoru

52

PhiLho tarafından belirtildiği gibi, özellik değerleri için tek tırnaklara izin verilmediğine dair yaygın bir inanç olsa da, bu inanç yanlıştır.

XML standardına özellik değerlerinin etrafında hem tek ve çift tırnak izin verir.

XHTML standardı bunu değiştirmek için hiçbir şey söylemez, ancak özellik değerlerinin alıntılanması gerektiğini bildiren ilgili bir bölüm , örnekte muhtemelen bu karışıklığa yol açan çift tırnak kullanır. Bu örnek, yalnızca XHTML'deki özellik değerlerinin XML'deki özellik değerleri için minimum standardı karşılaması gerektiğini belirtmektedir; bu, tırnak içine alınmaları (umursamayan düz HTML'nin aksine), ancak sizi tekli veya ikili alıntı.

Tabii ki, standartlara uygun olmayan bir ayrıştırıcıyla karşılaşmanız her zaman mümkündür, ancak bu olduğunda tüm bahisler yine de kapalıdır. Bu nedenle, spesifikasyonun söylediklerine sadık kalmak en iyisidir. Bu yüzden spesifikasyonlarımız var.


2
XML standardına bağlantı için +1. Bunun eski bir iş parçacığı olduğunu biliyorum, ancak tamlık için insanlar standarttaki AttValue dilbilgisi spesifikasyonuna özellikle dikkat etmelidir . EBNF'yi okuyabilirseniz (normal ifadelere çok benzer), nitelikleri sınırlamak için hem tek hem de çift tırnak kullanımına izin verdiğini göreceksiniz.
daiscog

7
Ancak HTML, SGML'ye dayanır (XML'e dayanan XHTML'dir), bu nedenle XML spesifikasyonundan alıntı yapmak çok yararlı değildir ...
Donal Fellows

Gerçek karışıklık, bir özellik değerindeki tek veya çift tırnakların her zaman kaçması gerekip gerekmediğidir. Özellik değerinin çevresinde çift tırnak kullanırsanız, çift tırnaklardan kaçmanız gerekir, ancak tek tırnaklardan kaçmanız gerekir. Bunun yerine, özellik değerinin etrafında tek tırnak kullanırsanız, tek tırnaklardan kaçmanız gerekir, ancak çift tırnaklardan kaçmazsınız. Ve bence bu da izin vermenin bütün mesele. Değerinizde çok fazla çift tırnak varsa, tüm değer etrafında tek tırnak kullanarak kaçmaktan kaçınabilirsiniz, bunun tersi de geçerlidir.
Triynko

Gerçek şu ki, bir XHTML belge modu kullanırsanız, Javascript tarafından oluşturulan herhangi bir HTML'yi çift tırnak kullanmaya zorlayarak , içinde kaç tane çift ​​tırnak bulunan öznitelikleri kırmaya çalıştığı Javascript yorumlayıcı sorunları ile karşılaşırsınız . Birkaç yıl önce Firefox ve IE'de bu sorunla karşılaştım.
user2867288

16

HTML alanları için tek tırnakların HER tarayıcı tarafından tanınmadığını söyleyen insanlar duydum

O kişi yanlış.


30
Şart değil. Birkaç dakika içinde HTML alanları için tek tırnakları tanımayan bir tarayıcı oluşturabilirim. Tabii ki, tanımadığı çok daha fazlası olacak ...; P
Orbit'te Hafiflik Yarışları

@LightnessRacesinOrbit "Bu tarayıcının CSS'yi desteklemediğini kastediyor musunuz ?!"
BadHorsie

... ya da daha önemlisi, "o tarayıcı (ki değil) ölü ettir". : P
ToolmakerSteve

@LightnessRacesinOrbit - ama var mı? Bir tarayıcıyı tek tırnak kabul etmek için fazladan 5 dakikaya koyacak kadar motive olmuş gibi görünüyor.
user3413723

7

İnternette gördüğünüz her şeye inanmayın ...
Neyse ki, XHTML'de tek tırnakların geçerli olmadığını belirten birine benzer bir şeyi cevapladım ...

Mmm, yazarken yukarıya bakıyorum ve Adam N'nin aynı inancı yaydığını görüyorum. Olumunu destekleyebilirse, yazdıklarımı geri çekerim ... AFAIK, XML agnostiktir ve her iki alıntıyı da kabul eder. Ben bile denedim ve sadece tek tırnak ile bir XHTML sayfası sorunsuz doğruladı.


4

Tek sorun, verilerin METİN GİRİŞ alanlarına girmesidir. Düşünmek

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

İle aynı:

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

Bundan kaçamazsın, kullanmalısın htmlspecialchars.


2
Ancak şunları yapabilirsiniz:<input value='it&apos;s gonna break'/>
rink.attendant.6

4
Tek veya çift tırnak kullanma seçeneğimizin sebebinin, tam olarak bu senaryoda karakterlerden kaçmaktan kaçınmak olduğunu düşünüyorum. : Eğer değer sadece çift tırnak varsa, bu nedenle gibi çift tırnak kaçmak zorunda kalmamak için tek tırnak ile onu çevreleyen <input value="it's not gonna break"/>ve tersi: <input value='i say - "this is not gonna be trouble"'/>.
Triynko

1
@Triynko haklı. Ayrıca: For içerik , düşünün değil Peter barı değil, Peter çubuğu: ilk etapta "aptal tırnak" değil, “tipografik tırnak” kullanarak. ☞ en.wikipedia.org/wiki/Quotation_mark#Quotation_marks_in_English
Frank Nocke

2

Spesifikasyonun çok daha yeni bir versiyonunda bu konuda bilgi bulmaya çalıştığım ve onu bulmam biraz zaman aldı, işte burada:

itibaren

HTML 5.3

Editörün Taslağı, 18 Ekim 2018

[...]

8.1.2.3. Öznitellikler

Tek tırnaklı özellik değeri sözdizimi

Öznitelik adı, ardından sıfır veya daha fazla boşluk karakteri, ardından tek bir U + 003D EQUALS SIGN karakteri, ardından sıfır veya daha fazla boşluk karakteri, ardından tek bir U + 0027 APOSTROPHE karakteri (') ve ardından nitelik değeri, nitelik değerleri için yukarıda verilen gereksinimlere ek olarak, hiçbir gerçek U + 0027 APOSTROPHE karakteri (') içermemeli ve ardından ikinci bir tek U + 0027 APOSTROPHE karakteri (') içermemelidir.

Aşağıdaki örnekte, type özniteliği tek tırnaklı öznitelik değeri sözdizimi ile verilmiştir:

<input type='checkbox'>

Tek tırnaklı öznitelik sözdizimini kullanan bir özniteliği başka bir öznitelik izleyecekse, ikisini ayıran bir boşluk karakteri olmalıdır.

http://w3c.github.io/html/single-page.html#elements-attributes


1

Ayrıca HTML'de tek tırnak kullanmaya eğilimliyim ve hiç sorun yaşamadım.


1

HTML sayfalarında tek tırnak kullandım ve içine JavaScripts gömdüm ve iyi çalışıyor. IE9, Chrome ve Firefox'ta test edildi - iyi çalışıyor gibi görünüyor.

<!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')};

-1

Son zamanlarda Google Arama optimizasyonu ile ilgili bir sorun yaşadım. Tek bir tırnak işareti varsa, bağlı sayfaları taramış gibi görünmüyor.


1
Bu sadece <a href=''>niteliklerde mi?
AntonChanning

-2

... ya da sadece heredoc kullanın. O zaman hiçbir şeyden kaçmak için endişelenmenize gerek yok END.


PHP'deki yorumlu metin yeteneğinden bahsettiğinize inanıyorum .
DavidRR

Orijinal sorunun bağlamında bu cevabın neden reddedildiğinden emin değilim. Doğrudan çift ayetler tek tırnak sorunu cevap vermez, ancak ilk etapta tek tırnak lehine OP yol açan php kaçan sorunu giderir. Ancak bir kullanım örneği ile yapabilirdi.
AntonChanning

-10

Tek Alıntılar HTML için uygundur, ancak geçerli XHTML yapmazlar; bu, HTML'yi desteklemeyen ancak yalnızca XHTML'yi destekleyen bir tarayıcı kullanıyorsa sorunlu olabilir. Bu tür tarayıcıların var olduğuna inanmıyorum, ancak muhtemelen sıkı XHTML gerektiren bazı Kullanıcı Aracıları var.


daha da kötüsü, HTML sayfaları yazan ancak 'daha iyi' olduğu için XHTML olarak işaretleyen kişilerdir. Neyse ki bu heves düşüyor gibi görünüyor.
Javier

4
XHTML ile ilgili bu ifadenin doğru olduğuna inanmıyorum. Hem "hem de" XML'de kabul edilebilir ve W3C geçerlilik denetleyicisi tek tırnaklı özniteliklere sahip XHTML belgelerini kabul eder. Belki de XHTML ile HTML'de yasal olan alıntılanmamış nitelikleri ortadan kaldıran bir karışıklık olabilir?
Doug McClean

Sayfanızı metin / html tarayıcıları olarak değil metin / xhtml olarak sunmadığınız sürece, sayfayı HTML olarak görüntüleyeceği için HTML kuralları geçerli olur. Ne yazık ki, w3C ilkelerinden biri WEB'İ KIRMAK İÇİN DEĞİLDİR. Çünkü şimdi çalışıyor, muhtemelen yarın çalışacak.
Diodeus - James MacFarlane

8
XHTML, sayfaların iyi biçimlendirilmiş XML olmasını gerektirir ve XML, öznitelikler etrafında çift veya tek tırnak kullanımına izin verir.
Ned Batchelder

@SoftwareMonkey Aslında, application/xhtml+xmlya da ihtiyacınız var application/xml.
rink.attendant.6
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.