Jiný URLEncode ve VB.NET a PHP   zodpovězená otázka

VB.NET

Zdravím,

pokud zákoduji ve VB.NET string "čččč" pomocí:

UrlEncode(arg.Value, System.Text.Encoding.UTF8)

vyjde cosi jako:

%c4%8d%c4%8d%c4%8d%c4%8d

když to stejné udělám v php:

%E8%E8%E8%E8

Neví někdo co s tím? Díky

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Protože v .NETu to kódujete jako Unicode, kdežto v PHP ne.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Máte pravdu.. špatně jsem použil testovací skript. Problém tedy je:

VB.NET vygeneruje:

%c4%8d%c4%8d%c4%8d%c4%8d

A PHP :

%C4%8D%C4%8D%C4%8D%C4%8D

Může se to zdát jako stejné, ale ne pokud to používám jako parametr pro API.

Parametry se pak zahashují a přidá se k nim API Secret, aby se zajistila jedinečnost požadavku. No a sha1 hashy zřejmě není jedno velikost písmen. A pak se samozřejmě hashe na straně VB a PHP neshodují.

Takže jak udělat ta písmena v encodingu velká?

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Vy hashujete tento zaenkódovaný řetězec? Není lepší na něj před tím zavolat UrlDecode? Pak tohle nemusíte řešit.

Hashovací funkce (ať už MD5, SHA či jakákoliv jiná) pracují výhradně s binárními daty, jestli hashujete text, obrázek je hashovací funkci úplně jedno - vezm hromádku bitů a udělá z ní jinou hromádku bitů.

Velké písmeno má pochopitelně jinou hodnotu než malé, proto hashe vyjdou jinak.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Ano, to mě také napadlo... nechávám si to jako poslední řešení. Ono totiž takhle se to dělá i v jiných API, a ta API by měla v budoucnu sloužit především pro lidi... a když to udělám jinak tak to bude něco s čím by mohli mít problémy.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

To je pěkný nesmysl.

Ať už je to zakódováno s velkými či malými písmeny, je to validní výsledek URL encodingu. Proč budovat zbytečné omezení a říct "tenhle URL encoding je správný a tenhle špatný", i když jsou správně oba a oba kódují stejnou hodnotu?

Problém je v tom, že URLenkódovaná hodnota není jednoznačná!

Text "AHOJ", "%41%48%4F%4A", "%41H%4F%4A" reprezenutjí (za předpokladu, že jsou URL-enkódované) stejnou hodnotu.

Proč vymýšlet zbytečná omezení, jako že tenhle znak se nesmí kódovat, tenhle naopak jo, a kódy musí být jen malými písmeny a když je měsíc v úplňku, tak se nesmí kódovat ani fň.

Lidé, kterými se oháníte, daleko spíš ocení, když jim to bude fungovat z PHP, VB.NET, ať už funkce UrlEncode jsou napsané jakkoliv, než když jim uměle vynutíte Jeden Správný Způsob, Který Nesmrdí ™, jen proto, že jste líný parametry napřed dekódovat.

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Zdravím,

co říkáte dává smysl... Navíc mi ani nic jiného nezbývá :). Tak díky.

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback