Diskuze: Ošetření speciálních znaků u nickname

PHP PHP Ošetření speciálních znaků u nickname American English version English version

Avatar
idc
Člen
Avatar
idc:

Ahoj, rozhoduji se, jestli při registraci mám povolit speciální znaky jako jsou <>&@ atp.. (Samozřejmě u nickname). Pokud je povolím, uživatel si bude moc založit nickname typu <h1>uzivatel</h1> a tím narušit mou stránku. Proto přemýšlím nad funkcí htmlspecialchars. Ovšem pokud jí použiji, uživatel dostane zcela jiný název. Můj dotaz z ní:
Zakázat speciální znaky, nebo je nějaký způsob na jejich povolení bez jejich změnění na &alt nebo &gt. Díky za odpověď.

 
Odpovědět 30.11.2013 20:13
Avatar
Snorlax
Redaktor
Avatar
Snorlax:

zkus použít funkci StrTr, třeba tou to nějak půjde

Nahoru Odpovědět  +1 30.11.2013 20:16
Kdo chce pochopit, pochopí. Kdo dělá že chce pochopit, může pouze dělat, že pochopil...
Avatar
idc
Člen
Avatar
idc:

Zkusil jsem a jde to skvěle. Jen jaké znaky mám zadat do pole. Myslíš, že stačí < > /. Nebo ještě nějaké?

 
Nahoru Odpovědět 30.11.2013 20:21
Avatar
Kit
Redaktor
Avatar
Odpovídá na idc
Kit:

Před vložením do databáze provedeš před starým způsobem query:

$nickname = mysql_real_escape_string($_POST['nickname']);

Výstup nickname do HTML:

echo htmlspecialchars($nickname);

Víc to řešit nemusíš. Uživatel <h1>uzivatel</h1> se zobrazí včetně HTML značek, stránku tedy nenaruší.

Nahoru Odpovědět  +1 30.11.2013 20:22
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
idc
Člen
Avatar
idc:

Dobře a pokud používám PDO? Je nějaká alternativa za mysql_real_es­cape_string? Nebo stačí pouze prepare?

 
Nahoru Odpovědět 30.11.2013 20:29
Avatar
Snorlax
Redaktor
Avatar
Odpovídá na idc
Snorlax:

tak záleží co jim povolíš ty že... pro jistotu bych jim povolil jen písmena, čísla, tečku a pomlčku. víc nepotřebujou

Nahoru Odpovědět 30.11.2013 20:35
Kdo chce pochopit, pochopí. Kdo dělá že chce pochopit, může pouze dělat, že pochopil...
Avatar
idc
Člen
Avatar
idc:

Bylo by to bezpečnější. Ale zde na devbooku jsou také povolené speciální znaky a vše jde v pohodě.

 
Nahoru Odpovědět 30.11.2013 20:38
Avatar
Kit
Redaktor
Avatar
Odpovídá na idc
Kit:

Ano, stačí prepare:

$prep = $pdo->prepare("INSERT INTO uzivatel (nickname) VALUES (?)");
$prep->execute(array($_POST['nickname']));

Alternativou je $pdo->quote($string); Doplňuje i správné apostrofy podle typu otevřené databáze. Má se však dávat přednost $pdo->prepare().

Nahoru Odpovědět  +4 30.11.2013 20:39
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
idc
Člen
Avatar
Odpovídá na Kit
idc:

Oukej, díky moc :)

 
Nahoru Odpovědět 30.11.2013 20:44
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 9 zpráv z 9.