Autor Zpráva
argonisius
Profil *
Dobrý den, narazil jsem na problém při aktivaci účtu. Používám zde metodu get ke zjištění uživatelského jména a aktivačního klíče. Zjistil jsem, že pokud je uživatelské jméno "Háček", tak $_GET přijme "Háček". Jde nějak nastavit, aby to přijalo normálně?
Joker
Profil
argonisius:
$_GET - nepodporuje háčky a čárky?
Podporuje.
Možná bude problém v kódování vstupního formuláře a skriptu, který ho zpracovává.
argonisius
Profil *
Aha... tak to bude kódováním e-mailu... je nějaká jednoduchá cesta, jak určit kódování pro předmět i obsah e-mailu? Tekt bude vždy v cp-1250.
Alphard
Profil
argonisius:
Navštivte místní FAQ.
argonisius
Profil *
To jsem z toho jelen... Když tu aktivační adresu otevřu v IE, Mozille nebo Opeře, tak to funguje... Jen v Chromu to nefunguje... Možná dělám něco špatně: adresa je takováto: http://localhost/www/hra/Moje%20hra/aktivace.php?username=Háček&validkey=991d9bd0d81712b6f1b8b2d7db6c6074

nenapadá vás, proč to blbne?
argonisius
Profil *
Omlouvám se, právě jsem otevřel ten odkaz v předchozím postu ve Chromu - a hle! Funguje. Pokud ho však "vložím" do adresního řádku, tak to zase nefunguje.
argonisius
Profil *
Tak... dokáže mi někdo odpovědět na otázku, proč když zadám tuto adresu do google chromu: http://localhost/www/hra/moje_hra/aktivace.php?username=ěščřžýáíéůúúů&validkey=36e5ee00feb151dfe72450f2421c727f , tak se mi z uživatelského jména udělá paskvil, a když ji dám do IE, Mozilly atd tak vše funguje? Ještě, jak jsem zjistil v minulém postu, tak když ten odkaz otevřu na webu (tady na fóru), tak funguje???
argonisius
Profil *
Aha... tak už nefunguje ani to s "otevřením odkazu" tady na fóru - když ho otevřu, tak mám v adresní řádce místo

http://localhost/www/hra/moje_hra/aktivace.php?username=ěščřžýáíéůúúů&validkey=36e5ee00feb151dfe72450f2421c727f

toto:

http://localhost/www/hra/moje_hra/aktivace.php?username=%EC%B9%E8%F8%BE%FD%E1%ED%E9%F9%FA%FA%F9&validkey=36e5ee00feb151dfe72450f2421c727f
argonisius
Profil *
Ještě doplním kód, který odesílá aktivační mail s odkazem:
$validkey = md5(uniqid());
		         $query = sprintf("INSERT INTO users(username,password,email,validkey,validated) VALUES ('%s','%s','%s','$validkey','0');",
		  	       mysqli_real_escape_string($dbconnect,$username),
		  	       mysqli_real_escape_string($dbconnect,sha1($password)),
               mysqli_real_escape_string($dbconnect,$email));
		         mysqli_query($dbconnect,$query)
		           or die ('Při registraci nastaly potíže.');
		         $zprava = "Pro aktivaci účtu klikněte na tento odkaz: $path/activace.php?username=$username&validkey=$validkey";
		         $zprava= Base64_Encode($zprava);
		         $hlavicka = "MIME-Version: 1.0\n";
             $hlavicka .= "Content-Type: text/plain; charset=\"windows-1250\"\n";
             $hlavicka .= "Content-Transfer-Encoding: base64";
		         mail ("$email","$game - Aktivace účtu","$zprava","$hlavicka")
		           or die ('Nemohu odeslat aktivační e-mail.');
             echo '<span class="oznameni">Děkujeme za registraci. Byl vám zaslán aktivační e-mail.</span>';


a kód aktivačního scriptu:
<?php

     // Kontrola přijetí dat
     if($_GET) 
       {
         $username=$_GET['username'];
         $validkey=$_GET['validkey'];
         
         // ověření, zda souhlasí uživatelské jméno a aktivační klíč
         $query = sprintf("SELECT * FROM users WHERE username = '$username' AND validkey = '$validkey'",
		       mysqli_real_escape_string($dbconnect,$username),
		       mysqli_real_escape_string($dbconnect,$validkey));
	       $result = mysqli_query($dbconnect,$query)
	                   or die ('Nemohu ověřit správnost aktivačních údajů.');
	       $data = mysqli_fetch_array($result);

	       if(!$data)
	         {
	           echo '<span class="chybova_hlaska">Špatná kombinace uživatelského jména a aktivačního klíče!</span>';
	         }
	       // Aktivace účtu  
	       else
	         {
	           $query = sprintf("UPDATE users SET validated = '1' WHERE username = '$username'",
		           mysqli_real_escape_string($dbconnect,$username));
	           $result = mysqli_query($dbconnect,$query)
	                       or die ('Nemohu aktivovat Váš účet.'); 
	           echo '<span class="oznameni">Váš účet byl úspěšně aktivován. Nyní se můžete <a href="prihlaseni.php">přihlásit</a>.</span>';           
	         }
       }
       
   ?>
tiso
Profil
argonisius:
http://www.eskimo.com/~bloo/indexdot/html/topics/urlencoding.htm
http://en.wikipedia.org/wiki/Percent-encoding
http://www.ietf.org/rfc/rfc1738.txt
Kajman_
Profil *
Slovo "Háček" převeďte pomocí funkce iconv na utf-8 (není-li už rovnou v utf-8), výsledek prožeňte přes funkci rawurlencode a to teprve dejte do adresy odesílané emailem.

V aktivnačním skriptu pak očekávejte proměnnou username v utf-8 - tedy si ji převeďte zpět přes iconv do kódování, se kterým pracujete.
argonisius
Profil *
Díky, funguje to - jen by mě ještě zajímalo - zatím jsem tam tu funkci iconv nezařadil, jestli když to funguje, tak to znamená, že řetězec bude vždy v utf-8, nebo to tak být nemusí - tedy bych to tam měl zařadit.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0