Różnica między kodowaniem adresu URL a kodowaniem HTML

85

Jaka jest różnica między kodowaniem adresu URL a kodowaniem HTML ?

Quintin Par
źródło
5
Jeśli chcesz zakodować w celu użycia w adresie URL, użyj kodowania URL. Jeśli chcesz zakodować do wyświetlenia na stronie HTML, kodujesz ją w formacie HTML
Mitch Wheat
4
Kodowanie adresu URL zakoduje znaki, aby były one prawidłowe dla adresów URL. Np. ?Staje się kodem %3FHTML, zakoduje znaki, więc są one prawidłowe dla HTML. Np. <Staje się&lt;
Matt Ellen

Odpowiedzi:

83

Kodowanie HTML powoduje uniknięcie znaków specjalnych w ciągach znaków używanych w dokumentach HTML, aby zapobiec pomyłkom z elementami HTML, takimi jak zmiana

"<hello>world</hello>" 

do

"&lt;hello&gt;world&lt;/hello&gt;"

Kodowanie adresu URL działa podobnie w przypadku wartości ciągów w adresie URL, na przykład zmienia

"hello+world = hello world"

do

"hello%2Bworld+%3D+hello+world"
Mehrdad Afshari
źródło
15
Kodowanie HTML i kodowanie adresów URL robią zasadniczo różne rzeczy. Jeśli zakodujesz w formacie HTML, na przykład „hello world” i spróbujesz dodać go do adresu URL, otrzymasz nieprawidłowy adres URL. Obie są ważne i powinny być używane w różnych sytuacjach.
Neil
1
Po prostu musiałem przejść i zamienić kilka zastosowań HtmlEncode do kodowania adresów URL na UrlEncoding, problemy z kodowaniem spacji i innymi znakami specjalnymi
PJUK
Uważaj, używanie HtmlEncode zamiast UrlEncode może być problematyczne w przypadku adresów URL, ponieważ HtmlEncode umieszcza znaki „&” w całym ciągu. W zależności od tego, czego oczekuje Twoja usługa sieciowa odbierająca adres URL, kilka dodatkowych znaków „&” może być bardzo problematycznych. Na przykład, jeśli Twoja usługa internetowa oczekuje, że każdy parametr w adresie URL będzie poprzedzony znakiem „&”, ale użyłeś kodu HtmlEncode, który dodał kilka dodatkowych znaków „&”, prawdopodobnie wystąpi błąd, gdy usługa sieciowa próbuje zinterpretować adres URL. Właśnie z tego powodu musiałem zamienić kilka zastosowań HtmlEncode na UrlEncode.
jdnew18
3
Proszę, nie słuchaj Philla. Nie mogę uwierzyć, że używa ciągów zapytań i tworzy nowoczesne adresy URL za pomocą HtmlEncode zamiast UrlEncode. Stwierdzenie, że UrlEncode jest w większości bezużyteczny, jest jedną z najbardziej absurdalnych rzeczy, jakie widziałem od jakiegoś czasu na tej stronie.
Nard Dog
23

urlEncode zastępuje znaki specjalne znakami, które są zrozumiałe dla przeglądarek internetowych / serwerów WWW w celu adresowania ... stąd URL. Na przykład spacje są zastępowane przez% 20, '=% 27 itd ...

Zobacz te referencje:

HtmlEncode zastępuje znaki specjalne ciągami znaków, które są rozpoznawane przez sam silnik HTML w celu renderowania zawartości strony - takie rzeczy jak & stają się &amp; or < = &lt; > = &lt;tym, co uniemożliwia silnikowi HTML interpretowanie tych znaków jako części znaczników HTML i dlatego renderuje je tak, jakby były smyczki.

Zobacz to odniesienie:

BenAlabaster
źródło
W rzeczywistości URLEncode zastępuje spacje znakiem +, co może być problemem w niektórych sytuacjach.
NetMage
13

Zarówno HTML, jak i adresy URL są zasadniczo bardzo ograniczonymi językami . Jako język dodają znaczenia określonym słowom kluczowym lub operatorom. Jednak w obu tych językach słowa kluczowe są prawie zawsze pojedynczymi znakami. Na przykład

  • HTML:> i <
  • URL: / i:

W przypadku używania każdego języka możliwe jest jednak użycie tych konstrukcji w sposób, który nie zapewnia znaczenia języka. Na przykład ten post zawiera znak>. Nie chcę, aby był interpretowany jako HTML, tylko tekst.

W tym miejscu do gry wchodzą metody kodowania i dekodowania. Metody te odpowiednio pobiorą ciąg znaków i przekonwertują dowolny ze znaków, które w innym przypadku byłyby traktowane jako słowa kluczowe, do postaci ze znakami ucieczki, która nie zostanie zinterpretowana jako część języka.

Na przykład: Przekazanie> do HtmlEncode zwróci & gt;

JaredPar
źródło
3

HTMLEncode i URLEncode zajmują się nieprawidłowymi znakami w kodzie HTML i adresach URL, a dokładniej znakami, które muszą być specjalnie napisane, aby można je było poprawnie zinterpretować. Na przykład w HTML znaki <i> są używane do wskazania tagów. Tak więc, jeśli chcesz napisać formułę matematyczną, na przykład 1 + 1 <2 + 2, „<” normalnie zostanie zinterpretowany jako początek znacznika. HTMLEncoding zamienia ten znak na „& lt;” który jest zakodowaną reprezentacją znaku mniejszości. URLEncoding robi to samo, ale dla adresów URL, dla których znaki specjalne są różne, chociaż niektóre się nakładają.

Michael Bray
źródło
1

Nie wiem, w jakim języku pracujesz, ale na przykład podręcznik PHP zawiera dobre wyjaśnienia.

URLEncode

Zwraca ciąg, w którym wszystkie znaki niealfanumeryczne oprócz -_. zostały zastąpione znakiem procentu (%), po którym następują dwie cyfry szesnastkowe i spacje zakodowane jako znaki plus (+). Jest on kodowany w taki sam sposób, jak zakodowane dane z formularza WWW, czyli tak samo jak w typie mediów application / x-www-form-urlencoded. Różni się to od kodowania »RFC 1738 (patrz rawurlencode ()) tym, że ze względów historycznych spacje są kodowane jako znaki plus (+).

Czytaj

Pekka
źródło