none
Narodni znaky v url

    Dotaz

  • dobry den, zdravim.

    jak prosim korektne vytahnu narodni znaky z url?

    jde o to, ze pokud napriklad posilam narodni znaky v querystringu, nedari se mi je zadnym zpusobem napr vypsat do stranky.

    jiny druh problemu: uzvatel si pres ftp vytvori adresar, v jehoz nazvu je cesky znak. Ja potom prochazim tyto adresare, generuji z nich web stranku, kde jsou odkazy do techto adresaru, jenze pokud je v nazvu adresare cesky znak, pri kliknuti na odkaz prichazi na server pozadavek, ve kterem je cesky znak kodovan jako %EC apodobne, kdyz testuji, jestli takovy adresar na serveru existuje, spadne to.

    Muzete mi prosim pomoci? dekuji velmi
    středa 12. listopadu 2008 9:04

Odpovědi

  • Pro zapsání nestandardních znaků do QueryStringu, resp. obecně z adresy, použijte metody HttpUtility.UrlEncode(), pro zpětné přečtení pak HttpUtility.UrlDecode().

    středa 12. listopadu 2008 11:10
    Moderátor
  • A jinak Vám čeština na stránce funguje?

    Mě to přijde, že nemáte ve web.configu nastaveno responseEncoding (obvykle se dnes nastavuje na utf-8).

    ...zkuste se taky podívat do zdrojového HTML kódu výsledné stránky, co tam vlastně je (View Source Code v IE).

     

    čtvrtek 13. listopadu 2008 13:54
    Moderátor
  • Je to pozoruhodné, ale chová se to takto:

    Pokud do web.configu doplníte requestEncoding="windows-1250", začne Vám Vaše situace ve FF fungovat (ale nedělejte to!). FireFox totiž adresní řádek encoduje do windows-1250 a kašle na Vaše instrukce o utf-8. Toto se ale děje pouze v naprosto nereálném scénáři, kdy bastlíte ten svůj text rovnou do adresní řádky!

     

    Pokud QueryString vznikne korektně (přes <form action="get"> , nebo přes link s UrlEncode()), pak vše funguje správně.

    Zkuste si třeba toto:

    Code Snippet

    protected void Page_Load(object sender, EventArgs e)

    {

    string str = "řšěčřěšč";

    Response.Write("<html><head></head><body>" +

    Request.QueryString["a"] + "<br>" + str + "<br>" + HttpUtility.UrlEncode(str) + "<form method=\"get\"><input type=\"text\" name=\"a\"><input type=\"submit\"></form></body></html>");

    }

     

     

     

    úterý 25. listopadu 2008 7:24
    Moderátor

Všechny reakce

  • Pro zapsání nestandardních znaků do QueryStringu, resp. obecně z adresy, použijte metody HttpUtility.UrlEncode(), pro zpětné přečtení pak HttpUtility.UrlDecode().

    středa 12. listopadu 2008 11:10
    Moderátor
  • bohuzel to mi nefunguje. pokud udelam jednoduchou stranku, na kterou poslu ?a=ěščřžýáíé
    (prohlizec zakoduje a posila ?a=%EC%9A%E8%F8%9E%FD%E1%ED%E9)
    pri pouziti

    Response.Write(Request.QueryString["a"]);

    se vypise: ��������

    pri pouziti
    Response.Write(HttpUtility.UrlDecode(Request.QueryString["a"]));
    je vysledek stejny.
    Nepomaha ani zmenit kodovani HttpUtility.UrlDecode (tady jsou vysledky jine, ale ne spravne).
    Nepomaha ani zmenit Request.ContentEncoding.

    Paradoxne nejblize je vysledek pri pouziti Response.Write(Request.Url);
    tehdy se zobrazi http://servername.cz/testh.aspx?a=ìšèøžýáíé

    pri prochazeni objektu Request v debuggeru jsem nasel nejakeho clena QueryStringBytes, ve kterem byly korektni inty odpovidajici znakum, ktere posilam. Na tuto vlastnost se, ale nedostanu a na webu jsem o ni taky prilis nenasel, takze bych se ji radsi bal.

    zkousel jsem vselijake cunaciny, jako nastavovat aktualnimu threadu cultureinfo apod....
    nic

    pro informaci jeste:
    bezi to na 64bitovem server2008, ve web.config je nastavena <globalization culture="en-us"/> (i kdyz tady bylo cs-cz, tak to nefungovalo)

    diky za jakekoliv rady.
    čtvrtek 13. listopadu 2008 11:03
  • A jinak Vám čeština na stránce funguje?

    Mě to přijde, že nemáte ve web.configu nastaveno responseEncoding (obvykle se dnes nastavuje na utf-8).

    ...zkuste se taky podívat do zdrojového HTML kódu výsledné stránky, co tam vlastně je (View Source Code v IE).

     

    čtvrtek 13. listopadu 2008 13:54
    Moderátor
  • ve zdrojovem kodu stranky je v meta nastaveno kodovani na utf-8, znaky, ktere jsem popisoval jsou ve zdrojovem kodu stranky. Pokud napisu do test.aspx.cs natvrdo Response.Write('ěščřžýáíé'); ve zdrojovem kodu stranky je korektne 'ěščřžýáíé'. ani pri explicitnim nastaveni responseEncoding=utf-8 zadna zmena.

    diky za vase reakce.
    pátek 14. listopadu 2008 9:55
  • omlouvam se za bumping, nemate nikdo nejaky napad? diky
    pátek 21. listopadu 2008 14:31
  • To je celé divné, problém bude jinde. Jestli chcete, pošlete mi svůj kód a já se na to podívám.

    pondělí 24. listopadu 2008 7:47
    Moderátor
  • soubor test.aspx:
    Code Snippet

    <%@ Page Language="C#" CodeFile="test.aspx.cs" Inherits="test" %>



    soubor test.aspx.cs:
    Code Snippet

    public partial class test : System.Web.UI.Page
    {
        private MyShop myShop;
        protected void Page_Load(object sender, EventArgs e)
        { 
            string str = "ěščřžýáíé";  
            Response.Write("<html><head><meta http-equiv='content-type' content='text/html; charset=utf-8' /></head><body>"+
                 Request.QueryString["a"]+"<br>"+str+"</body></html>");
        }
    }



    soubor web.config:
    Code Snippet

    <?xml version="1.0"?>

    <configuration>
        <system.web>
            <globalization culture="cs-cz" responseEncoding="utf-8"/>
        </system.web>
    </configuration>



    volana adresa:
    test.aspx?a=ěščřžýáíé

    vysledny kod stranky zobrazeny ve Firefoxu 2.0.0.18 :
    (volana adresa se v adresnim radku zmeni na: test.aspx?a=%EC%9A%E8%F8%9E%FD%E1%ED%E9)
    Code Snippet

    <html>
    <head>
    <meta http-equiv='content-type' content='text/html; charset=utf-8' />
    </head>
    <body>��������<br>ěščřžýáíé</body>
    </html>


    kod v IE6:
    (adresa v adresnim radku zustava test.aspx?a=ěščřžýáíé)
    Code Snippet

    <html>
    <head>
    <meta http-equiv='content-type' content='text/html; charset=utf-8' />
    </head>
    <body>ěščřžýáíé<br>ěščřžýáíé</body>
    </html>


    v Opere vse totozne jako FF.

    diky za cas a snahu
    pondělí 24. listopadu 2008 9:58
  • Je to pozoruhodné, ale chová se to takto:

    Pokud do web.configu doplníte requestEncoding="windows-1250", začne Vám Vaše situace ve FF fungovat (ale nedělejte to!). FireFox totiž adresní řádek encoduje do windows-1250 a kašle na Vaše instrukce o utf-8. Toto se ale děje pouze v naprosto nereálném scénáři, kdy bastlíte ten svůj text rovnou do adresní řádky!

     

    Pokud QueryString vznikne korektně (přes <form action="get"> , nebo přes link s UrlEncode()), pak vše funguje správně.

    Zkuste si třeba toto:

    Code Snippet

    protected void Page_Load(object sender, EventArgs e)

    {

    string str = "řšěčřěšč";

    Response.Write("<html><head></head><body>" +

    Request.QueryString["a"] + "<br>" + str + "<br>" + HttpUtility.UrlEncode(str) + "<form method=\"get\"><input type=\"text\" name=\"a\"><input type=\"submit\"></form></body></html>");

    }

     

     

     

    úterý 25. listopadu 2008 7:24
    Moderátor
  • dekuji za pomoc, zajimave zjisteni Smile

    jen doplnim:

    ve sve aplikaci vyuzivam presmerovani na 404.aspx v pripade neexistujiciho souboru. V IIS6 vse fungovalo jelikoz IIS6 pri presmerovani na 404.aspx doplnil do querystringu puvodni pozadavek korektne i v pripade, ze obsahoval urlenkodovane narodni znaky. IIS7 se bohuzel chova jinak, do querystringu doplni puvodni pozadavek v ASCII forme, tedy utf-8 informaci zahodi.
    Nyni resim presmerovani na urovni rewriteru.

    tolik na vysvetlenou, proc me zajimal querystring.

    Pokud byste vedel, jak IIS7 presvedcit, at do querystringu pridava kompletni utf-8 informaci (ve forech jsem se o takovem nastaveni nedozvedel), takovou informaci bych uvital Smile

    jeste jednou dekuji.
    středa 26. listopadu 2008 10:47