Apostrophe (') karakterinden HTML öğesiyle birlikte çıkmalı mıyım (& # 39;)?


38

Hangi karakterlerin HTML öğeleriyle çıkarılması gerekir. Örneğin, &ile kaçar &.

Meli 'ile öncelenmelidir '?

Yanıtlar:


41

Yorum ayrıcalıklarına sahip değilim, yoksa daha önceki bir cevaba yorum olarak bırakmış olurdum.

YAPMAYIN, tekrar ediyorum, HTML kullanarak kesme işareti bırakmayın

'

Bu geçerli bir HTML karakter varlığı referansı değil. Bir XML karakter varlık referansıdır. Firefox ve Chrome, en azından yukarıdakileri bir HTML belgesinde kesme işareti olarak gösterse de, Internet Explorer bunu yapmaz. Ve bunu yapmayı reddettiği zaman standardı takip ediyor.

Bir kesme işareti kullanarak, HTML kullanarak

'

Ancak, genel olarak gerekli olduğuna inanmıyorum.

http://fishbowl.pastiche.org/2003/07/01/the_curse_of_apos/

http://en.wikipedia.org/wiki/List_of_XML_and_HTML_character_entity_references


Bunun yayınlandığında doğru olacağını biliyorum, ancak görünen Wikipedia makalesine bakıldığında &aposartık HTML5 için geçerli. Eski tarayıcıları desteklemeniz veya Outlook için HTML e-posta yazmanız 'gerekiyorsa, karakterden kaçmak için gerekli olduğunu düşünüyorsanız en iyi şekilde yapışmanız söylenir .
tomhughes

24

Nate ile aynı fikirde değilim. İdeal olarak, mümkün olduğunca az kaçış kullanmalı ve karakterleri doğal olarak ifade etmek için UTF-8 kullanmalısınız. Bunu yapmak için UTF-8'i idare edebilecek bir editöre ve ayrıca aşağıdaki gibi doğru bir karakter kümesi beyanına ihtiyacınız var:

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

Ancak, (X) HTML'de özel bir anlamı olan karakterlerden kaçmayı alışkanlık haline getirmelisiniz, yani:

< &lt;
> &gt;
" &quot;
& &amp;
' &#39;

Bu, bu karakterleri yazmak istediğinizde yanlışlıkla işaretleme yazmadığınızdan emin olmanızı sağlar. Bu, güvenliği korumak için kullanıcı girişi için özellikle önemlidir. Daha az açık, ama kaçmak gerçekten önemli ". Bir dize, bir HTML özniteliğinde ( title="something"vb.) Sona ererse , kullanıcı özniteliği sonlandırabilir ve kendi işaretlemesini ekleyebilir. Kullanıcı girerse " onclick="alert('hello');ve bunu eklediyseniz ne olacağını hayal edin .title="..."

PHP kullanıyorsanız, bunu htmlspecialcharsyapmak için işlevi kullanabilirsiniz . Diğer dillerin başka benzer işlevleri olabilir.

Güncelleme: Ben apos konusunda düzeltilmiş duruyorum. Kahretsin sinir bozucu IE.


Şimdi iki çelişen cevabım var. Biri kaçmayı önerir 'diğeri ise kaçmaz. Neye inanmalıyım?
Tom,

7
Kısacası. İsteğinize göre kaçabilirsiniz veya olmayabilir. Bunu yaparsanız, kullanmak &#39;değil &apos;. Herhangi bir nedenden ötürü, sizin gibi bir HTML niteliği için tek tırnaklar kullanıyorsanız title='something', bu değerin içindeki herhangi bir alıntıdan açıkça çıkmanız gerekir.
nitro2k01

İkinci paragraf kırmızı benim git metinlerin botches taahhüt nedeniyle çıkış kullanılmayan kesme işareti ile görünce, benim OKB overdrive içine başlamasına neden olan benim için önemli olan imgur.com/a/LN0Pu89
eballeste

6

Kullanım durumunuza bağlıdır, ancak 'genel olarak doğal dilde kullanmaktan vazgeçmemiz gerekir , bu nedenle XML'inizde bilgisayar kodunuz yoksa sorun ortaya çıkmamalıdır.

Dizelerin çevrildiği yerlerde, bazı çevirmenlerin kapanış tırnaklarını unicode kıvırcık tırnaklarıyla değiştirdiğini, ancak düz tırnakları açılış alıntıları olarak bırakarak görsel olarak dengesiz ve profesyonelce görünmelerini önlüyoruz.

Unicode karakterleri ve değiştirmeniz gerekir 'mümkünse kadar, ve değiştirmelisiniz ". Bu yararlıdır çünkü bilgisayarlar noktalama işaretlerini özel olarak algılamaz. (Stack Overflow / Chrome'un ' don’t' yazım hatası olduğunu, oysa ' ' olduğunu düşündüğümü görmek beni eğlendirse de don't.)

Klavyede çok cazip 've "karakterlere sahip olmamıza yardımcı olmuyor .


1

Öyleyse, StackExchange'in kendisinin bir HTML varlık kullanarak bir kesme işareti kodlayıp kodlamadığını görelim.

İşte bu sayfanın kaynak kodundan bazı örnekler.

(1) Soru başlığı: Kodlanmış.

Should I escape the Apostrophe ( &#39; ) character with its HTML entity (&amp;#39;)?

(2) drew'in cevabı: Kodlanmadı.

But I don't believe it is, in general, necessary.

(3) Tom'un nitro2k01'in cevabı üzerine yorumu: Kodlanmış.

I&#39;ve got two contradicting answers now. One recommends escaping &#39; and the other does not. What should I believe?

Bu yüzden iki tarafa da gider.

Ancak, bu sayfanın kaynak kodu hiçbir zaman kullanmaz &apos;. Tüm kodlamalar biçimindedir &#39;. Bu nitro2k01 ile uyumludur ve kullanmamaya yönelik tavsiyede bulunur &apos;.


1
Her 3 örnekte de HTML kodlu olması gerekmez .
MrWhite

1

Bu ip nereye gidiyor?

Cevabınız içeriğe bağlıdır:

  1. Bu verilerle HTML’de bir paragraf yazıyorsanız, <,> ve & 'dan kaçmanız yeterli olabilir:

    <p>{string}</p>

  2. Bir HTML özniteliğine yazıyorsanız, ancak

    <a href='/some/path/{string}'>...</a>

O zaman apostrophe'den kesinlikle kaçmalısın. Bir saldırgan bunu için koyarsa bu bir saldırı vektörü olabilir string:

string = "' onmouseover='alert(\"nasty script here!\")' data-ignore='"
  1. Aynı şey çift tırnak için de geçerli. Hatta backtick `in savunmasız olduğunu bile okudum, çünkü bu HTML özelliklerinde de kullanılabiliyordu. Dağıtım rutinlerinizin bir parçası olarak otomatik bir HTML sözdizimi kontrol komut dosyası yoksa, bu üçten birinin kullanılabileceğini ve HTML öznitelikleri için kaçılması gerektiğini varsayalım.

  2. En uç noktalarda bile, alıntılanmamış nitelikler bile geçerlidir, bu nedenle boşluk karakterinin de kaçması gerekir. Ve !, @, $, %, (, ), =, +, {, }, [, ve ], her biri bir özelliğin patlak ve yenisini ekleyerek izin verebilir.

Ne yaparım

JavaScript'te kaçış yapmak için, JQuery's'i kullanıyorum $(element).text(string)veya $(element).attr(attrname, string)kaçanları benim için yapıyorum. HTML'inizden kaçmayan $(element).html(unsafe), çok dikkatli olun !

Sunucu tarafı kodunda her durum için riski dikkatlice değerlendirmek ve belgeleri dikkatlice okumak zorundayım. Bu, Rails, Django, raw PHP, Drupal, vs. gibi kullandığınız belirli dil ve kütüphanelere bağlı olacaktır.

Veritabanları

Sorunu mümkün olduğunca erken durdurmayı düşünüyorsanız, veritabanınıza girmeden önce atlarınızı tutun. DB'nizde depolanan metnin HTML'den kaçması, sizi cehennem gezintisine çıkarabilir. Daha sonra belirli HTML etiketlerine izin vermek, ancak italik, kalın, renkler ve tablolar gibi diğerlerine izin vermek istemezseniz ne olur? Ne ilk geçişte şey kaçırmış, ancak escaper zaten kaçmış sanki &olarak &amp;ve "sıra &quot;? O dönüştürmeniz Will &amp;amp;ve &amp;quot;?

Benim yaklaşımım sadece veritabanı için SQL'den kaçış yapmak, fakat daha sonra işlenmek üzere tüm HTML özel karakterlerini içeride bırakmak. Bu şekilde, HTML çıkışlarımdan kolayca hata ayıklayabilir ve ince ayar yapabilirim. Ayrıca, kullanıcı tarafından sağlanan dizeleri varsa kendi SQL tablolarıma güvenemeyeceğim anlamına gelir.

manevi

Kullanıcı tarafından kontrol edilen girdilere asla güvenmeyin ve her zaman HTML niteliklerinizi alıntılayın!

Dayalı: HTML'den kaçan, Ryan Grove'dan &, <,> ve "den daha fazlası var


-1

Kesme işareti içeriğinize aitse, kaçın. Kodla karıştırılabilecek diğer tüm içerik karakterleri, ondan kurtulun.


"Kesme işareti içeriğinize aitse, kaçın." - Bu yanlış gibi görünüyor (sanki "yapma" kelimesini eksik gibi). Kesme işareti içeriğin bir parçasıysa, bundan kaçmayın - buna gerek olmamalıdır.
MrWhite

-4

Asıl varlığı kullanmadan işi yapmanın en kolay yolu PHP htmlentities()veya htmlspecialchars()işlevleri kullanmaktır:

$val = htmlspecialchars("Don't", ENT_QUOTES, 'UTF-8');
if($_POST){
  $val = htmlspecialchars(trim($_POST['val']), ENT_QUOTES, 'UTF-8');
}
echo "<!DOCTYPE html PUBLIC '-//W3C//DTD XHTML 1.0 Strict//EN' 'http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd'> 
<html xmlns='http://www.w3.org/1999/xhtml' xml:lang='en' lang='en' class='njs'> 
  <head>
    <meta http-equiv='Content-type' content='text/html;charset=utf-8' />
    <title>Special Characters</title>
    <style type='text/css'>
      @import 'special.css';
    </style>
  </head>
<body>
  <form method='post' action='' id='fm' name='fm'>
    <input type='text' value='$val' name='val' id='val' />
    <input type='submit' value='submit' name='sub' id='sub' />
  </form>
</body>
  <script type='text/javascript' src='special.js'></script>
</html>";

4
Bu bir şaka mı?
Su

@Su 'Korkarım öyle değil ...
William Edwards
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.