2011-02-04 19 views
5

Mam następujący skrypt, który koduje niektóre wartości, które otrzymuje, ale nie wydaje się kodować podwójnych cudzysłowów.Kodowanie kodu HTML przed POST

Jak poprawnie zakodować pełną wartość przed wysłaniem?

function htmlEncode(value){ 
    return $('<div/>').text(value).html(); 
} 

Powyższy skrypt daje mi to:

&lt;p&gt;Test&amp;nbsp; &lt;span style="color: #ffffff"&gt;&lt;strong&gt;&lt;span style="background-color: #ff0000"&gt;1+1+1=3&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt; 

muszę mi go dać w ten sposób:

&lt;p&gt;Test&amp;nbsp; &lt;span style=&quot;color: #ffffff&quot;&gt;&lt;strong&gt;&lt;span style=&quot;background-color: #ff0000&quot;&gt;1+1+1=3&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt; 

EDIT: Nawiązanie pytanie: Encoded HTML in database back to page

+2

Wygląda na to, że starają się klienta, aby jakiś tekst HTML bezpieczny przed przesłaniem go do serwera. Nie rób tego. Uczyń treść HTML bezpieczną w drodze z systemu, a nie w drodze (a zwłaszcza nie na kliencie, gdzie może zostać zmieniona) – Quentin

+0

Dlaczego musisz to zrobić JS na kliencie? – troutinator

+0

Dlaczego chcesz to dać '"' mimo to? Jeśli nie planujesz wstawić danych do wartości atrybutu (którą łączymy za pomocą ciągów zamiast DOM lub innego sensownego API), to używasz tylko 6 bajtów, gdy 1 zrobi to i utrudni czytanie. – Quentin

Odpowiedz

7

Ty powinnaś t próbować kodować rzeczy za pomocą JavaScript.

Powinieneś zakodować to na serwerze.

Wszystko, co można zrobić za pomocą JavaScriptu, można cofnąć.

Można zakodować ją w JavaScript, jeśli sprawdzisz również, czy kod został zakodowany na serwerze, ale pamiętaj: JavaScript może być wyłączony.

+0

Próbowałem wysłać standardowego html do serwera, ale otrzymuję komunikat o błędzie, że jestem próbuje wykonać skrypt cross site lub coś podobnego. Oto link, kiedy próbowałem wysłać html na serwer bez kodowania go. http://stackoverflow.com/questions/4897441/a-potentially-dangerous-request-form – oshirowanen

+1

@oshirowanen Domyślam się, że używasz 'vb.net', musisz wyłączyć walidację strony, aby móc uzyskać zawartość jako jest. – BrunoLM

+0

Czego używasz jako języka po stronie serwera? –

4

To, co George mówi, jest prawdą. Ale jeśli musisz kodować ciągi po stronie klienta, sugeruję użycie JavaScript encodeURIComponent().

+2

'Funkcje escape i unescape są przestarzałe. Użyj encodeURI, encodeURIComponent, decodeURI lub decodeURIComponent, aby kodować i dekodować sekwencje specjalne znaków specjalnych. 'https://developer.mozilla.org/en/JavaScript/Reference/Deprecated_Features – BrunoLM

+3

A W3Schools jest przerażający. http://w3fools.com – Quentin

1

Można użyć tego modułu w JS, bez konieczności jQuery:

htmlencode

-1

użycie escape (STR) w po stronie klienta

i

HttpUtility.UrlDecode (str, System.Text.Encoding.De wina); po stronie serwera

to zadziałało dla mnie.

+0

Nie jestem pewien, czy zrozumiałeś to pytanie, a to w szczególności wymaga podania kodu serwera po stronie klienta. W ogóle nie wspomina o serwerze, więc kod serwera, który dołączyłeś, najprawdopodobniej nie miałby znaczenia. –

+0

Tak, Andrew, masz rację. Dałem mu sztuczkę do kodowania po stronie klienta.i dodatkowo zasugerowałem mu, jak sobie z nim radzić po stronie serwera, jeśli to konieczne, –

0

Miałem podobny problem. Po prostu użyłem metody replace w javascript. Oto fajny artykuł do przeczytania: http://www.w3schools.com/jsref/jsref_replace.asp

Zasadniczo to, co robi zamiennik, to zamienia lub zastępuje znak, który znajduje się na tym, co wskazano jako znak zastępczy.

Więc tak:

var str=' " That " '; 
str = str.replace(/"/g,'&quot;'); 

Po zalogowaniu to do konsoli w przeglądarce, dostaniesz coś

&quot; That &quot; 

I tak:

var str=' " That " '; 
str = str.replace(/"/g,'blahblahblah'); 

Po zalogowaniu to do konsoli przeglądarki, otrzymasz coś w rodzaju

blahblahblah That blahblahblah