W JavaScript:
encodeURIComponent("©√") == "%C2%A9%E2%88%9A"
Czy istnieje odpowiednik dla aplikacji C #? Do ucieczki znaków HTML użyłem:
txtOut.Text = Regex.Replace(txtIn.Text, @"[\u0080-\uFFFF]",
m => @"&#" + ((int)m.Value[0]).ToString() + ";");
Ale nie jestem pewien, jak przekonwertować dopasowanie do prawidłowego formatu szesnastkowego używanego przez JS. Na przykład ten kod:
txtOut.Text = Regex.Replace(txtIn.Text, @"[\u0080-\uFFFF]",
m => @"%" + String.Format("{0:x}", ((int)m.Value[0])));
Zwraca „ %a9%221a"
for "©√"
zamiast "%C2%A9%E2%88%9A"
. Wygląda na to, że muszę podzielić ciąg na bajty lub coś w tym stylu.
Edit: To jest dla aplikacji Windows, tylko pozycje dostępne w System.Web
to: AspNetHostingPermission
, AspNetHostingPermissionAttribute
, i AspNetHostingPermissionLevel
.
HttpUtility.HtmlEncode
/ DecodeHttpUtility.UrlEncode
/ DecodeMożesz dodać odwołanie do
System.Web
zestawu, jeśli nie jest dostępne w Twoim projekcieźródło
Próbowałem zrobić w pełni kompatybilny analog z encodeURIComponent javascript dla C # i po moich 4-godzinnych eksperymentach znalazłem to
C # KOD:
string a = "!@#$%^&*()_+ some text here али мамедов баку"; a = System.Web.HttpUtility.UrlEncode(a); a = a.Replace("+", "%20");
wynik to: !% 40% 23% 24% 25% 5e% 26 * () _% 2b% 20some% 20text% 20here% 20% d0% b0% d0% bb% d0% b8% 20% d0% bc% d0% b0% d0% bc% d0% b5% d0% b4% d0% be% d0% b2% 20% d0% b1% d0% b0% d0% ba% d1% 83
Po zdekodowaniu go za pomocą funkcji decodeURLComponent () JavaScript;
otrzymasz to :! @ # $% ^ & * () _ + tekst tutaj али мамедов баку
Dziękuję za uwagę
źródło
Uri.EscapeDataString("!@#$%^&*()_+ some text here али мамедов баку")
zamiast tego.Uri.EscapeDataString
koduje znaki „(” i „)”, podczas gdyHttpUtility.UrlEncode
nie.System.Uri.EscapeUriString () najwyraźniej nic nie zrobił, ale System.Uri.Escape Data String () działał dla mnie.
źródło
Spróbuj
Server.UrlEncode()
lubSystem.Web.HttpUtility.UrlEncode()
w przypadku, gdy nie masz dostępu doServer
obiektu. Możesz również użyć,System.Uri.EscapeUriString()
aby uniknąć dodawania odwołania doSystem.Web
zestawu.źródło
Uri.EscapeUriString()
odpowiada to JavaScriptowiencodeURI()
- który zachowuje znaki zarezerwowane dla URI. takie jak/
,,&
... as-is (plus#
), podczas gdy - jak odkryłeś, jestUri.EscapeDataString()
to odpowiednik JavaScriptencodeURIComponent()
.W przypadku aplikacji ze Sklepu Windows nie będziesz mieć HttpUtility. Zamiast tego masz:
W przypadku identyfikatora URI przed „?”:
W przypadku nazwy lub wartości zapytania URI po znaku „?”:
W przypadku nazwy lub wartości zapytania x-www-form-urlencoded w treści POST:
źródło
Możesz użyć obiektu Server w przestrzeni nazw System.Web
Server.UrlEncode, Server.UrlDecode, Server.HtmlEncode i Server.HtmlDecode.
Edycja: poster dodał, że jest to aplikacja Windows, a nie internetowa, jak można by sądzić. Elementy wymienione powyżej byłyby dostępne z klasy HttpUtility wewnątrz System.Web, którą należy dodać jako odniesienie do projektu.
źródło