Chcę wyświetlić tekst do HTML za pomocą funkcji javascript. Jak mogę uniknąć specjalnych znaków HTML w JS? Czy istnieje interfejs API?
javascript
html
fernando123
źródło
źródło
Odpowiedzi:
źródło
replace()
połączeniach są niepotrzebne. Równie dobrze sprawdzą się zwykłe stare ciągi jednoznakowe.źródło
Możesz użyć
.text()
funkcji jQuery .Na przykład:
http://jsfiddle.net/9H6Ch/
Z dokumentacji jQuery dotyczącej
.text()
funkcji:Poprzednie wersje Dokumentacji jQuery sformułowały to w ten sposób ( wyróżnienie dodane ):
źródło
const str = "foo<>'\"&";
$('<div>').text(str).html()
wydajnościfoo<>'"&
Myślę, że znalazłem właściwy sposób, aby to zrobić ...
źródło
document.createTextNode("<script>alert('Attack!')</script>").textContent
Za pomocą lodash
kod źródłowy
źródło
To zdecydowanie najszybszy sposób, w jaki to widziałem. Ponadto robi to wszystko bez dodawania, usuwania lub zmieniania elementów na stronie.
źródło
var divCode = '<div data-title="' + escapeHTML('Jerry "Bull" Winston') + '">Div content</div>'
Da niepoprawny HTML!Ciekawe było znalezienie lepszego rozwiązania:
Nie analizuję,
>
ponieważ nie psuje kodu XML / HTML w wyniku.Oto testy: http://jsperf.com/regexpairs Ponadto stworzyłem funkcję uniwersalną
escape
: http://jsperf.com/regexpairs2źródło
Najbardziej zwięzłym i wydajnym sposobem wyświetlania niekodowanego tekstu jest użycie
textContent
właściwości.Szybszy niż używanie
innerHTML
. I to bez uwzględnienia ucieczki.źródło
</
spełnienia sekwencji zamykającej .Elementy DOM obsługują konwersję tekstu na HTML poprzez przypisanie do innerText . innerText nie jest funkcją, ale przypisywanie do niej działa tak, jakby tekst został poprzedzony znakiem ucieczki.
źródło
<br>
elementy zamiast znaków nowej linii, które mogą rozkładać niektóre elementy, takie jak style lub skrypty. NiecreateTextNode
jest podatny na ten problem.innerText
ma pewne problemy ze starszymi wersjami / specyfikacjami. Lepszy w użyciutextContent
.Możesz zakodować każdy znak w ciągu:
Lub po prostu celuj w głównych bohaterów, aby się martwić (&, inebreaks, <,>, "i '), takich jak:
źródło
Jednowarstwowy (dla ES6 +):
W przypadku starszych wersji:
źródło
Ten problem pojawił się podczas tworzenia struktury DOM. To pytanie pomogło mi rozwiązać. Chciałem użyć podwójnego szewronu jako separatora ścieżki, ale dodanie nowego węzła tekstowego bezpośrednio spowodowało wyświetlenie kodu znaku ucieczki zamiast samego znaku:
źródło
Jeśli korzystasz już z modułów w swojej aplikacji, możesz użyć modułu Escape-HTML .
źródło
Spróbuj tego, korzystając z
prototype.js
biblioteki:Wypróbuj wersję demo
źródło
Wymyśliłem to rozwiązanie.
Załóżmy, że chcemy dodać do elementu trochę html z niebezpiecznymi danymi od użytkownika lub bazy danych.
Jest niebezpieczny przed atakami XSS. Teraz dodaj to.
Tak jest
Dla mnie jest to o wiele łatwiejsze niż używanie
.replace()
i usunie !!! wszystkie możliwe tagi HTML (mam nadzieję).źródło
<script>
w<script>
.