2016-03-30 20 views
3

Bir kullanıcı bir textarea html girişine kopyalayıp yapıştırabilir ve bazen geçersiz UTF-8 karakterlerini yapıştırabilir, örneğin bir sekme içeren bir rtf dosyasından kopyalayıp yapıştırın.javascript dizesinin geçerli olup olmadığını kontrol edin UTF-8

Dizenin geçerli bir UTF-8 olup olmadığını nasıl kontrol edebilirim?

+1

size yardımcı olabilir http://stackoverflow.com/questions/20639052/check -if-the-bayt-dizisi-geçerli-utf-8-dizisi-in-javascript –

+0

[Javascript'te kullanıcının UTF-8 adını doğrulama] 'ye benzer (http://stackoverflow.com/questions/6381752/ validating-users-utf-8-isim-in-javascript) – Abhijit

cevap

1

"UTF-8 karakterleri" nin ne anlama geldiğini yanlış anlıyorsunuz. UTF-8, kaydedilmiş insanlık tarihinde var olan her karakterin ve glifin hemen hemen tamamını temsil edebilen bir Unicode kodlamasıdır, böylece "geçersiz" UTF-8 karakterleri yoktur. RTF, temel kodlama sisteminden bağımsız olarak çalışan bir biçimlendirme sistemidir; RTF'yi ASCII, UTF-8, UTF-16 ve diğerleri ile kullanabilirsiniz. HTML'deki metin kutuları yalnızca düz metne saygı duyar, böylece herhangi bir RTF biçimlendirmesi otomatik olarak silinir (sizin kabul etmediğimi düşündüğüm bir "zengin düzenleme" bileşeni kullanmıyorsanız).

Ancak, boşluk karakterleri (sekmeler gibi: \t) Unicode (ve böylece UTF-8) olarak gösterilenleri tanımlayabilirsiniz. Bu karakterleri içeren bir dize hala "geçerli UTF-8", iş gereksinimleriniz söz konusu olduğunda geçersiz.

Sadece sıyırma aşımı öneririz istenmeyen karakterleri (buradan: Match non printable/non ascii characters and remove from text) görünmeyen karakterler ile eşleşen bir düzenli ifade kullanarak [^\x20-\x7E] maçları codepoint aralığında 0x20 herhangi bir karakter DEĞİL

textBoxContent = textBoxContent.replace(/[^\x20-\x7E]+/g, ''); 

ifade (32 , ' ' normal boşluk karakteri 0x7E (127, '~' karakterleri), diğerleri silinecektir.

Unicode'un ilk 127 codepoints ASCII aynıdır ve burada görülebilir: http://www.asciitable.com/

+1

Bu yanıttaki bazı yanlış anlamaları düzeltmek için: UTF8 "karakterleri" diye bir şey yoktur; Bir kodlama şeması olarak Unicode kod noktalarını kodlayan "UTF8 bayt dizileri" vardır ve bu bayt dizileri bayt dizisindeki yasadışı değerlerden * mutlak * zarar görebilir. Benzer şekilde, "ortografik yapıların" sayısal kodlara resmi olarak eşleştirilmesinde Unicode * ayrıca * kullanılamayan belirli sayılara sahiptir. Geçersiz bir bayt dizisi içeren bir UTF8 bayt akışı veya yasa dışı sayılar içeren kodu çözülmüş bir Unicode dizisi ile karşılaşmak tamamen mümkündür, yani: "geçersiz UTF-8 karakterleri" vardır. –

-1

Sadece bir fikir:

function checkUTF8(text) { 
    var utf8Text = text; 
    try { 
     // Try to convert to utf-8 
     utf8Text = decodeURIComponent(escape(text)); 
     // If the conversion succeeds, text is not utf-8 
    }catch(e) { 
     // console.log(e.message); // URI malformed 
     // This exception means text is utf-8 
    } 
    return utf8Text; // returned text is always utf-8 
} 
+0

'escape' kullanımdan kaldırıldı ve kullanılmamalıdır (çünkü Unicode'u düzgün kullanamaz) – Quentin

İlgili konular