Unicode karakterlerinin JavaScript'ten HTML'de emoji olarak işlenmesi nasıl engellenir?


119

FileFormat.Info'nun aramasından özel karakterler için Unicode buluyorum .

⚠ (uyarı işareti \u26A0veya ⚠) gibi bazı karakterler klasik siyah beyaz glifler olarak görüntüleniyor . CSS stilleri (renk gibi) uygulayabildiğim için bunlar tercih edilir.

uyarı glifinin görüntüsü

Diğerleri, ⌛ (kum saati \u231Bveya ⌛) gibi daha yeni çizgi film benzeri emoji olarak işliyor . Tam olarak biçimlendiremediğim için bunlar tercih edilmez.

kum saati emoji görüntüsü

Kum saati glifini Mac Firefox'ta görebildiğim için tarayıcı bu değişikliği yapıyor gibi görünüyor, Mac Chrome veya Mac Safari'de değil.

Tarayıcıları daha eski (düz monoton) sürümleri görüntülemeye zorlamanın bir yolu var mı?

Güncelleme : O (aşağıdaki yorumlardan) görünüyor orada metin sunum seçici , FE0Emevcut metin-vs-emoji uygulamak. Seçici, ⌛︎HTML hex veya \u231B\uFE0EJS için olduğu gibi karakterin koduna boşluksuz bir sonek olarak birleştirilir . Ancak, tüm tarayıcılar (ör. Chrome ve Edge) tarafından onurlandırılmamaktadır .


CSS kurallarınızda bir yazı tipi ailesi belirliyor musunuz?
G-Cyrillus


1
@janaspage ︎ve \uFE0Edoğru (2 ve 8) ve Safari'de (8 ve 9) iyi çalışıyor, ancak cevabın dediği gibi: tarayıcı desteği yetersiz ve Chrome (46) tamamen bozuk.
一 二三

2
Emojilerin işlenmesini kontrol etmenin standart bir yolu yoktur.
nwellnhof

1
Tek yapmanız gereken, bu karakterler için glifler içeren ve glifleri istediğiniz gibi görünen (renk yok, şekil yok veya ne tercih ederseniz) bir yazı tipi uygulamaktır.
ShreevatsaR

Yanıtlar:


133

Metin zorlamak için Unicode varyasyon seçici karakterini ekleyin , VS15 ︎,.
Bu, önceki karakterin bir Emoji Sembolü yerine metin olarak işlenmesine zorlar.

<p>🔒&#xFE0E;</p>

Sonuç: 🔒︎

Daha fazla bilgi edinin: Metin veya emoji olarak Unicode sembolü


1
Bu çok yardımcı oldu, bu yüzden geçen gün oy verdim. Bir emojiyi ve bu görünmez karakteri yazdığım bir Facebook reklamına nasıl yapıştırabilirim acaba ? Not: Bu da ilginçti: apple.stackexchange.com/a/240450/53510
Ryan

3
Bu &#xFE0E;numaranın belirli yazı tiplerinde işime yaramadığını yeni fark ettim . Tüm makinelerde (Windows, iOS, Mac, Android, vb.) Makul olarak yüklenmesini bekleyebileceğim bir yazı tipi bulmakta zorlanıyorum.
Ryan

12
Bu çözüm, giriş alanlarında bile ortaya çıkabilecek semboller için gerçekten kabul edilemez. Mantıkta kullanılan ↔ sembolüyle bu sorun yaşıyorum ve hayatım boyunca neden birinin bunun bir emoji olması gerektiğini düşündüğünü anlayamıyorum!
frabjous

2
Aşağıdaki sayfa, bir emojinin hemen ardından bu özel karakteri kopyalayıp yapıştırarak stilize olmak yerine düz görünmesini sağlamak için yararlıdır. Örneğin, 💬 yerine 💬 ve 🌟 yerine ve yerine ⌛︎ ve 🔒 yerine ⌛︎ (cihazınıza bağlı olarak) görebilirsiniz unicode-symbol.com/u/FE0E.html
Ryan

15
Bu, benim için örnekte, mac 10.11.6'daki chrome 71'de bir emoji olarak görülüyor.
lahwran

13

Ben de Unicode karakter vardı contenta span::beforeve ben font-familyarasındaspan "Segoe UI Symbol" için sette. Ancak Chrome, yazı tipi olarak "Segoe UI Emoji" yi kullandı.

Ancak, font-family"Segoe UI Sembolü" nü sadece için değil, açıkça için ayarladığımda işe yaradı.span::beforespan


Bu doğru cevap olmalıdır, özellikle eski görünmez karakter yöntemi çoğu büyük tarayıcı tarafından kabul edilmediğinden.
Sarah C. Corriher

2

İOS'un emojiyi görüntülemesini engellemeye yönelik yalnızca CSS içeren bir çözüm için font-family: monospace, emoji varyantı yerine glifin metin varyantı için varsayılan olanı kullanabilirsiniz .


1

Android yazı tipleri beklediğiniz gibi zengin değildir. Yazı tipi dosyalarında bu egzotik glif yoktur ve Android'de glif içermeyen birkaç karakter için bir hack vardır. Simgeler ile değiştirilirler.

Yani çözüm, siteyi bir web fontu (woff) ile entegre etmektir. FontForge ile yeni yazı tipi dosyası oluşturun ve örneğin ücretsiz serif TTF'den gerekli glifi seçin. Her glif 1k alır. Woff dosyası oluşturun.

Özel yazı tipi ailesini içe aktarmak için basit CSS hazırlayın.

style.css:

@font-face {
  font-family: 'Exotic Icons';
  src: url('exotic-icons.woff') format('woff');
}

.exotic-symbol-font {
    position: relative;
    top: 1px;
    display: inline-block;
    font-family: 'Exotic Icons';
    font-style: normal;
    font-weight: normal;
    line-height: 1;

    -webkit-font-smoothing: antialiased;
    -moz-osx-font-smoothing: grayscale;
}

index.html dosyası:

<html>
  <head>
    <meta charset="utf-8">
    <link href="style.css" rel="stylesheet"></head>
    <title>Test custom glyphs</title>
  </head>
  <body>
    <table>
      <tr>
        <td class="exotic-symbol-font">
            😭  &#x2660; a  g
        </td>       
      </tr>
    </table>
  </body>
</html>

1

Birincil endişeniz tek renkli ekranı zorlamaksa, böylece emoji metinden çok fazla öne çıkmazsa, CSS filtreleri, tek başına veya Unicode varyasyon seçiciyle birlikte istediğiniz bir şey olabilir.

p.gscale { 
  -webkit-filter: grayscale(100%);
  filter: grayscale(100%);
}
a {
  color: #999;
  -webkit-filter: grayscale(100%) sepia(100%) saturate(400%) hue-rotate(170deg);
   filter: grayscale(100%) sepia(100%) saturate(400%) hue-rotate(170deg);
}
<p class="gscale">You've now got emoji display on 🔒lockdown🔒.</p>

<p>External Link: <a href="https://knowyourmeme.com/memes/party-hard">celebrate 🎉</a></p>

Varyasyon seçicinin aksine, emojinin nasıl oluşturulduğu önemli olmamalıdır, çünkü CSS filtreleri her şeye uygulanır. (Bunları, Wayback Makinesini işaret edecek şekilde değiştirilmiş köprülerdeki PNG biçimli "bağlantı türü" simgelerini gri tonlamalı olarak kullanıyorum.)

Sadece uyarıya dikkat et . Bir alt öğedeki ana öğenin filtresini geçersiz kılamazsınız, bu nedenle bu teknik bir paragrafı gri tonlamak ve ardından içindeki bağlantıları yeniden renklendirmek için kullanılamaz. 😢

... yine de, her şeyi bir köprü haline getireceğiniz veya içindeki zengin işaretlemeye izin vermeyeceğiniz durumlar için kullanışlıdır. (ör. başlıklar ve açıklamalar)

Ancak, CSS gerçekten uygulanmadıkça bu işe yaramayacaktır, bu yüzden daha güvenilir olan ikinci bir seçenek vereceğim. <title> Unicode varyasyon seçiciden (sana bakıyorum GitHub. tarayıcı sekmeleri):

Kullanıcı tarafından sağlanan bir dizeyi bir <title>öğeye koyuyorsanız , herhangi bir kalın / italik / altı çizili / vb. İle birlikte emojiyi filtreleyin. işaretleme. (Evet, gözden kaçıranlar için standart, " <title>ve işareti kaçışlarının yanı sıra düz metin olmasını ister ve test ettiğim tarayıcılar, içindeki tüm etiketleri değişmez metin olarak yorumlar.)

Düşünebileceğim iki yol:

  1. Doğrudan , Unicode'un en yeni sürümünün emojisini ve değiştiricilerini koyduğu bloklarla eşleşen, manuel olarak tutulan bir normal ifade kullanın .
  2. Grapheme kümeleri arasında yineleyin ve tanınan emoji kod noktalarını içerenleri atın . (Bir grafem kümesi, bir temel glif artı görünür karakteri oluşturan tüm aksan işaretleri ve diğer değiştiricilerdir. Bağlandığım örnek, belirtmek için Python'un normal ifade motorunu ve ardından emojiveritabanı paketini kullanır, ancak Rust, bir dil için iyi bir örnektir. burada yinelenen grafem kümeleri gibi bir sandık aracılığıyla hızlı ve kolaydır unicode-segmentation.)

0

75 masaüstü sürümü olan Google Chrome, bir sayfayı yüklerken karşılaştığı ilk Unicode çıkışına dayalı olarak Unicode karakterlerini işleme yaklaşımını belirsizleştiriyor gibi görünüyor. Örneğin, bir sayfa kaynağında ilk HTML Unicode çıkışı olarak ayrıştırıldığında ve emoji eşdeğeri olmadığında & # 9207; Chrome'a, sayfanın emoji olarak oluşturulmaması için çıkışlar içerdiğini netleştiriyor gibi görünüyor.


0

Ssokolow'un cevabını genişletmek , bir filtre kullanmak güzel ve en azından basit bir yazı tipi kullanmak yerine konturları görünür kılıyor, ancak bir RGB rengini bir dizi CSS filtresine dönüştürmek, belirli bir rengi kullanmak istediğinizde çok zordur.

Daha iyi bir seçenek (oldukça uzun olmasına rağmen) <feColorMatrix>SVG filtresini kullanmaktır . Gri tonlama filtresi ve veri URI şemasıyla birleştirildiğinde, rengi RGB ve satır içi CSS aracılığıyla temsil edebilirsiniz:

.violet {
  color: white;
  filter: grayscale(100%) url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg'><filter id='f'><feColorMatrix type='matrix' values='0.78 0 0 0 0  0 0.082 0 0 0  0 0 0.522 0 0  0 0 0 1 0'/></filter></svg>#f");
}

Ne yazık ki, URL'yi verilerle (özniteliklerden veya değişkenlerden alınan) enterpolasyon yapamazsınız, ancak en azından CSS filtrelerini RGB'den hesaplamanız gerekmez.


-2

Emoji türü oluşturmayı kapatmanın bir yolunu bilmiyorum. Genellikle harika yazı tipi veya glif simge gibi bir simge yazı tipi kullanırım (Bootstrap 3 ile birlikte gelir).

Bunları unicode karakterlere göre kullanmanın yararı,

  1. sitenizin tasarımına uyması için birçok farklı stil arasından seçim yapabilirsiniz;
  2. tarayıcılar arasında tutarlıdırlar (eğer bir unicode yıldız karakteri yapmayı denediyseniz, IE'de diğer tarayıcılardan farklı olduğunu fark edeceksiniz);
  3. ayrıca, kullanmaya çalıştığınız unicode karakterleri gibi tamamen biçimlendirilebilirler.

Tek dezavantajı, tarayıcının sayfanızı görüntülediğinde indirmesi için bir şey daha olmasıdır.


-2

OSX'te benim için çözüm, yazı tipi ailesini EmojiSymbols


-3

Yukarıdaki çözümlerden hiçbiri "Google Chrome için Emoji" Uzantısı için işe yaramadı.

Bu yüzden geçici bir çözüm olarak Unicode Karakterinin 'CHECK WITH BALLOT BOX WITH CHECK' (U + 2611) ekran görüntüsünü yaptım ve php ile görüntü olarak ekledim:

 $ballotBoxWithCheck='<img src="pics/U2611.png" style="height:11px;margin-bottom:-1px">'; # &#9745; or /U2611

görüntü açıklamasını buraya girin

Bakınız: https://spacetrace.org/man_card.php?tec_id=21&techname=multi-emp-vessel


Metin aracını kullanarak (uygun bir lisansı seçili bir yazı tipiyle) Inkscape'e yapıştırmak ve ardından bir otomatik izlemeyi çalıştırmak neredeyse kesinlikle daha iyidir, böylece ihtiyacınız olan boyuta ölçeklenecek bir SVG alabilirsiniz. (Mümkün olduğunca küçültmek için, bir SVG minifier'ı otomatik izlemenin hata yaptığı yollardaki düğüm sayısını azaltmak için bazı manuel düzenlemelerle eşleştirin.)
ssokolow
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.