2011-10-14 25 views
12

Mam prosty edytor html. Załóżmy, że użytkownik wpisze następujący:Zapobiegaj jQuery przed ucieczką z encji html

<p>Ok, this just &amp; sucks :) &ndash;</p> 

i jest zapisany w pewnym zmiennej:

var content = "<p>Ok, this just &amp; sucks :) &ndash;</p>"; 

Teraz gdzieś używam jQuery do dołączania ten tekst do jakiegoś elementu:

$(this).html(content); // where content is the string above 

problemem jest to, że uciekł:

<p>Ok, this just &amp;amp; sucks :) &amp;ndash;</p> 

Jak mogę uzyskać dokładny ciąg z & amp; i & ndash; a także mieć <, a nie & lt; ponieważ potrzebuję tagów HTML?

Edycja: więcej szczegółów dodaje

Odpowiedz

9

Problemem nie jest to, że jQuery jest uciec podmioty. Myślę, że jeśli użyjesz pliku console.log do napisania ciągu znaków content, zobaczysz, że twój edytor zwraca ci elementy ze zmianami.

Cały punkt .html() vs .text() jest taki, że .html() jest dla HTML, który będzie traktowany jak HTML.

+3

Dzięki za odpowiedź. Cóż, tak, "treść" jest już zabezpieczona (zawiera ten sam tekst, co pierwszy kod powyżej), ale jQuery ponownie ucieka ponownie, więc "ndash; ' jest tworzone. – ladar

1

Chyba chcesz mieć tekst <p>Ok, this just &amp;amp; sucks :) &amp;ndash;</p> być dokładnie przedstawione zz ich konwersji, tak że &amp; i ndash; nie zostaną zamienione na & i -, a następnie użyć:

$(this).text(content); 

jeden problem z tym, że content zostanie dodany jako tekst na stronie elementu this. Będzie to , a nie utworzyć element i dołączyć go do this.

Ale jeśli chcesz uzyskać efekt konwersji, kod powinien zadziałać.

Jeszcze jedna rzecz, o której chcę wspomnieć, Uważam, że język nie jest jedynym związanym z tymi nawróceniami. Przeglądarka odgrywa główną rolę w tych przypadkach. Tak, co robimy w skrypcie, jeśli przeglądarka ma kolejną szansę sprawdzenia zawartości, przekonwertuje je na & i -.

Powiązane problemy