Kullanıcı girdisini istemci tarafında (javascript) bir XML belgesinde depolamaya çalışıyorum ve bunu kalıcılık için sunucuya iletiyorum. Örneğin, bir kullanıcı bir STX karakteri (0x2) içeren bir metne yapıştırılmıştır. XMLSerializer, STX karakterinden kaçmadı ve bu nedenle, iyi biçimlendirilmiş XML'e serileştirilmedi. Ya da belki de .attr() çağrısı STX karakterinden kaçmış olmalı, ancak her iki durumda da geçersiz XML üretildi.XMLSerializer() ile serileştirilmeden önce geçersiz karakterleri XML'den kaldırma()
Ben, tarayıcı XMLSerializer() her zaman iyi biçimli değildir çıktısını buluyorum (ve hatta tarayıcının kendi DOMParser()
Bu örnek tatmin etmiyor STX karakteri olduğunu gösteriyor düzgün XmlSerializer'ı() tarafından kodlanmamış:
> doc = $.parseXML('<?xml version="1.0" encoding="utf-8" ?>\n<elem></elem>');
#document
> $(doc).find("elem").attr("someattr", String.fromCharCode(0x2));
[ <elem someattr=""></elem> ]
> serializedDoc = new XMLSerializer().serializeToString(doc);
"<?xml version="1.0" encoding="utf-8"?><elem someattr=""/></elem>"
> $.parseXML(serializedDoc);
Error: Invalid XML: <?xml version="1.0" encoding="utf-8"?><elem someattr=""/></elem>
her zaman iyi oluşacak nasıl tarayıcı içi (keyfi kullanıcı girişi ile belirlenir parametreleri içeren) bir XML belgesi oluşturmalıdır şekilde
(herşey düzgün kaçtı)? IE8 veya IE7'yi desteklemem gerekmez.(Ve evet, ben sunucu tarafında XML doğrulamak, ancak tarayıcı sunucu iyi biçimlendirilmemiş bir belge el varsa, sunucunun yapabileceği en iyisi, bunu reddetmek, bu fakir için yararlı değil kullanıcı) İşte
Gerekirse varlıklara karakter çevirerek, karakter dizgisi karakterinden daha kolay bir şey olmadığından emin değilim. – Pointy
Bunu yapmak için kendime güvenmeyeceğim (XML'in DİĞER olası sorunları araştırmaya yetecek kadar iyi bile bilmiyorum) ... makeSafeForXML (inString) için bunu yapmak için ortak bir/standart JS kitaplığı var mı? – Seth
Ayrıca, muhtemelen kazara iki katına çıkarılmayacak mısın? Örneğin, gelecekteki bir tarayıcıda XMLSerializer() + attr() öğesi yetkilendirmeyi bitirirse, siz çıkış yapamazsınız? – Seth