Diskuze: URL - %2F
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.
Zobrazeno 13 zpráv z 13.
K personalizaci obsahu a reklam, poskytování funkcí sociálních médií a analýze naší návštěvnosti využíváme soubory cookie. Informace o tom, jak náš web používáte, sdílíme se svými partnery pro sociální média, inzerci a analýzy. Partneři tyto údaje mohou zkombinovat s dalšími informacemi, které jste jim poskytli nebo které získali v důsledku toho, že používáte jejich služby.
Používáme nezbytné cookies pro fungování webu a s tvým souhlasem také analytické a marketingové cookies.
Zajišťují základní funkce, bezpečnost a služby, které sis vyžádal. Nelze je vypnout.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| ITnetwork | ITnetwork | Provoz webu, relace, přihlášení a uložení nastavení cookies. | PHPSESSID, auth_token, sid, itn_consent_impression, __Host-itn_consent | Relace až 1 rok |
| Google Tag Manager | Správa značek a načítání měřicích nástrojů webu. | Žádné | Neukládá se | |
| Google Fonts | Načítání typografie webu. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele | |
| Google Hosted Libraries | Načítání potřebných knihoven a stylů webu. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele | |
| Google reCAPTCHA | Ochrana formulářů a webu před zneužitím. | _GRECAPTCHA, rc::a, rc::b, rc::c, rc::f | Relace až 180 dní | |
| YouTube | Přehrávání vloženého video obsahu. | localStorage, IndexedDB; cookies after playback interaction | Relace až trvalé úložiště | |
| Vimeo | Vimeo | Přehrávání vloženého video obsahu. | __cf_bm, _cfuvid, vuid, localStorage, IndexedDB | Relace až 2 roky |
| Facebook Login | Meta | Přihlášení pomocí účtu třetí strany. | Úložiště řízené poskytovatelem | Relace až 1 rok |
| GoPay | GoPay | Zpracování uživatelem vyžádané platby. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele |
Pomáhají nám porozumět používání webu a zlepšovat ho.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| Google Analytics 4 | Měření návštěvnosti a používání webu. | _ga, _ga_* | Až 2 roky | |
| Microsoft Clarity | Microsoft | Měření návštěvnosti a používání webu. | _clck, _clsk, _cltk | Relace až 1 rok |
Slouží k měření kampaní, personalizaci reklamy a marketingové komunikaci.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| Google Ads | Měření kampaní, reklama a remarketing. | _gcl_au, _gcl_ls | Relace až 90 dní | |
| Meta Pixel | Meta | Měření kampaní, reklama a remarketing. | _fbp, _fbc, localStorage | Až 90 dní |
| Sklik | Seznam.cz | Měření kampaní, reklama a remarketing. | retargeting, sid, szn:* | Relace až trvalé úložiště |
| LinkedIn Insight | Měření kampaní, reklama a remarketing. | bcookie, li_gc, lidc, __cf_bm | Relace až 1 rok | |
| Ecomail | Ecomail.cz | Měření kampaní, reklama a remarketing. | ecmid, Úložiště řízené poskytovatelem | Dle podmínek poskytovatele |
| Atribuce kampaní ITnetwork | ITnetwork | Přiřazení návštěvy a objednávky ke kampani. | campaign_clid[*], user_session_context | Až 1 rok |
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.
Zjistil jsem novou skutečnost. Problém nastává, když url
skládám ve view. Alternativa je to celé překopat, ale měl bych tam
téměř duplicitní věci, což je škoda.
Pro úplnost problém nastává zde
asp-route-id="@ViewBag.ParentURL/@item.URL"
Lomítko se přeloží na %2F. Zkoušel jsem to i přes pomocnou proměnnou vytvořenou ve view, ale problém stále přetrvává.
Další poznatek. Pokud si url vytvořím do pomocné proměnné
string link = @ViewBag.ParentURL + @Html.Raw("/") + @item.URL;
Po výpis někde na stránku se vše zobrazí jak má. Bohužel při předávání asp-route-url="@link" to nepředá lomítko, ale %2F.

Ten preklad je samozrejme spravny.
Konvertovani do toho tvaru vypada nejak takto:
// js
function escapeUrl(str)
{
var func;
func = encodeURIComponent || encodeURI || escape;
return func(str);
//encodeURIComponent(value).replace(/!/g,'%21').replace(/'/g,'%27').replace(/\(/g,'%28').replace(/\)/g,'%29').replace(/\*/g,'%2A').replace(/%20/g,'+');
}
// php
function escapeUrl($str) {return urlencode($str);}
function unescapeUrl($str) {return urldecode($str);}
<script>
a = '@ViewBag.ParentURL/@item.URL';
b = '@ViewBag.ParentURL/@item.URL';
url = 'xxx?a=' + escapeUrl(a) + '&b=' + escapeUrl(a);
link = '<a href="'+escapeHTML(url)+'">'
</script>
Tvuj php/asp script by to mel umet dekodovat automaticky. Pokud ne, je ta
volba vypnuta nekde v nastaveni asp a musis to dekodovat funkci, viz moje
unescapeUrl.
Nebo, jakym zpusobem, kde se to pokousis dekodovat?
Moc tě nechápu. Dle toho co píšeš, tak je správně, že / se hodí na %2F. Dle mého zjištění, co jsem psal, tak stane se to pouze když se to předává jako parametr, když si proměnnou v šabloně vypíšu, tak se zobrazí vše jak má.
Dále je pak divné, že když jsem si ve funkci, která přebírala parametr zkoušel detekovat zda je tam %2F, tak mi to nikdy nenašlo, protože už tam nebylo %2F, ale /. Na windows se vše načetlo jak má (v url bylo %2F), ale na linuxu nic. Hodilo to ale chybu, že to nenašlo stránku pod url tou a tou a zase zde bylo %2F, ale /.
To co se děje na windows, že je v url %2F a načte se mi nevyhovuje, protože prostě pro uživatele to vypadá blbě, ale aspoň to jede.
Ahoj,
při zpracování View ti MVC v atributech automaticky escapuje zapisované
údaje. Proto ti přeloží / na %2F, můžeš použít Html.Raw pro zápis ve
View, nebo HttpUtility.UrlDecode pro dekódování před zpracováním při
obsluze.
takže by zápis byl
asp-route-id="@Html.Raw(ViewBag.ParentURL+"/"+item.URL)"
Bohužel to tady pracuje ještě nějak jinak. Kdyby to tak fungovalo, tak jak píšeš, tak už bych to to dávno měl.
Raději jsem ale vše zkoušel znovu a to jak Html.Raw, tak HttpUtility.UrlDecode. Vše mělo stejný výsledek, tedy %2F.
I zpracování v controlleru proměnné url pomocí HttpUtility.UrlDecode? Může to totiž dělat i to zpracování zbytku url do proměnné...
Když jsem dělal něco podobného používal jsem na to vlastní "router", něco jako toto kde jsem si rovnou překládal a routoval na controllery
Je to chyba routeru? Když je to zadané správně, tak i na linuxu to
funguje jak má. Problém vidím v předávání těch parametrů.
I v controlleru jsem to dělal a nic. Když bych to ale upravoval v conrolleru,
tak se mi nezmění tvar url, který potřebuji ne?
Je to problém renderování. Z attributu asp-route-id to escapuje, kdežto když to vložíš do href, tak to nechá pa pokoji.
ok, takže je třeba vytvořit vlastní router? Máš s tím nějak víc zkušeností, zda vše musí být zahrnuto ve vytvořeném, nebo to jde i nakombinovat se stávajícím? Současné řešení dělá vše co chci, jen blbne to escapovaní.
Problém vyřešen novou verzí ASP NET Core 2.2.
V dřívějších verzích byla pouze verze, která encoduje lomítka
[Route("{*url}")]
Nyní je tam už je i verze, která to nedělá. Liší se to v hvězdičkách
[Route("{**url}")]
Zobrazeno 13 zpráv z 13.